一.类和原型
        1.在JavaScript中,类的实现是基于原型继承机制的,如果两个实例都是从同一个原型对象中继承了属性,则它们是同一个类的实例。
        2.原型对象是类的唯一标志,当且仅当两个对象继承自同一个原型对象时,它们才是属于同一个类的实例。
 
二.类和构造函数
        1.每个javascript函数都自动拥有一个prototype属性,这个属性的值是一个对象,这个对象包含唯一一个不可枚举属性constructor。constructor属性的值是一个对象。
        var F = function (){};
        var p = F.prototype;
        var c= p.constructor;
        c === F
        这意味着对象继承的constructor均指代它们的构造函数,由于构造函数是类的公共标志,因此这个constructor属性为对象提供了类
        var  o = new F();
        o.constructor === F    
        2.如果是重新预定义的prototype对象,这个新定义的对象将不包含constructor。因此它的实例也不含有constructor属性,这时,只能自己添加constructor属性。如果使用预定义的原型对象,则不需要定义constructor属性,因为它本来就包含了。
        
三.Javascript中的类继承
        1.类包括实例属性和实例方法,以及静态属性和静态方法。在javascript中,实例属性是在构造函数内直接定义的属性,实例方法是原型对象中定义的方法,静态属性和静态方法是定义在构造函数名上的属性和方法。例如
        function  Complex(real,imaginary) {
                this.r = real;                    //这是实例属性
                this.i = imaginary;            
        }
        Complex.prototype.neg = function() {        //这时实例方法
                return new Complex(-this.r, -this.i); 
        }
        Complex.ZERO = new Complex(0,0);    //这是静态属性
        Complex.parse = function(){                        //这是静态方法
             /****
            */
        }
        2.JavaScript中基于原型的继承机制是动态的,对象从其原型中继承属性,如果创建对象之后原型的属性发生变化,也会影响到继承这个原型的所有实例对象。这意味着我们可以给原型对象添加方法来扩充类。
        3.可以给Object.prototype添加方法,从而使所有的对象都可以调用这些方法,但是不推荐,因为在ECMAscript5之前,无法将这些新增的方法设置为不可枚举的,如果给Object.prototype添加属性,这些属性是可以被for/in循环遍历到的。
        4.构造函数是类的公共标志,但原型是唯一标识,尽管instanceof运算符的右操作数是勾走函数,但是计算过程实际检测的是对象的继承关系,而不是检测创建对象的构造函数。
        instanceof和isPrototypeOf()的缺陷就是我们无法通过对象来获得类名,只能检测对象是否属于指定的类名。
        constructor也可以标识类,但是一样存在缺陷,一是在多个执行上下文的场景中无法正常工作,二是并非所有的javascript对象都具有constructor属性。
        5.当对一个对象进行序列化操作时,它会忽略对象的原型和构造函数。
        6.可以将变量闭包在一个构造函数内来模拟实现私有实例字段,调用构造函数会创建一个实例。
        7.定义子类:
        B.prototype = inherit(A.prototype);
        B.prototype.constructor = B;
        
 

《JavaScript权威指南》拾遗(下)的更多相关文章

  1. JavaScript权威指南 - 函数

    函数本身就是一段JavaScript代码,定义一次但可能被调用任意次.如果函数挂载在一个对象上,作为对象的一个属性,通常这种函数被称作对象的方法.用于初始化一个新创建的对象的函数被称作构造函数. 相对 ...

  2. JavaScript权威指南 - 对象

    JavaScript对象可以看作是属性的无序集合,每个属性就是一个键值对,可增可删. JavaScript中的所有事物都是对象:字符串.数字.数组.日期,等等. JavaScript对象除了可以保持自 ...

  3. JavaScript权威指南 - 数组

    JavaScript数组是一种特殊类型的对象. JavaScript数组元素可以为任意类型,最大容纳232-1个元素. JavaScript数组是动态的,有新元素添加时,自动更新length属性. J ...

  4. 《javascript权威指南》读书笔记——第二篇

    <javascript权威指南>读书笔记——第二篇 金刚 javascript js javascript权威指南 今天是今年的196天,分享今天的读书笔记. 第2章 词法结构 2.1 字 ...

  5. 《javascript权威指南》读书笔记——第一篇

    <javascript权威指南>读书笔记——第一篇 金刚 javascript js javascript权威指南 由于最近想系统学习下javascript,所以开始在kindle上看这本 ...

  6. 《JavaScript权威指南 第六版 中文版》(一)

    <JavaScript权威指南 第六版 中文版> 第二章 词法结构 2.1字符集 JavaScript是使用Unicode字符集编码写的. 2.1.1区分大小写 JavaScript是区分 ...

  7. JavaScript权威指南学习笔记6

    这两天主要翻看了书中的第18-22章,重点看了第17章:事件化处理,其它几章节主要是翻了下书知道有相关的概念,没有真正理解其中的内容,或者没有考虑究竟如何能把里面的内容应用到实际的项目中.说的讽刺一点 ...

  8. 《JavaScript权威指南》学习——js闭包

    序:闭包这个玩意啊~在很多没有代码块的语言中都会出现,已经成为大多程序员入门的一道坎,闭包让很多程序员觉得晦涩(事实上百度一下这个名词,真的说的很晦涩啊亲==|||),我第一次知道闭包这个名词是从&l ...

  9. 《JavaScript权威指南》读书笔记——JavaScript核心

    前言 这本由David Flanagan著作,并由淘宝前端团队译的<JavaScript权威指南>,也就是我们俗称的“犀牛书”,算是JS界公认的“圣经”了.本书较厚(有1004页),读起来 ...

  10. 【笔记】javascript权威指南-第三章-类型,值和变量

    javascript中的原始类型和对象类型(基本类型和引用类型) //本书是指:javascript权威指南    //以下内容摘记时间为:2013.7.27   计算机程序运行时需要对值(value ...

随机推荐

  1. 转:批处理for命令详解

    批处理for命令详解FOR这条命令基本上都被用来处理文本,但还有其他一些好用的功能!看看他的基本格式(这里我引用的是批处理中的格式,直接在命令行只需要一个%号)FOR 参数 %%变量名 IN (相关文 ...

  2. QReadWriteLock上锁容忍的等待时间是多久?

    非递归上锁情况下,同一个锁,已经被锁过一次,那么另外一个线程尝试上锁,会被挡在外面,但是会被挡多久呢?挡一分钟会被崩溃,还十分钟,还是永久等待而不崩溃(希望如此)?还是会立刻崩溃?因为不可以重复上锁. ...

  3. java多线程同步

    一篇好文:java多线程机制同步原则 概括起来说,Java 多线程同步机制主要包含如下几点:1:如果一个类包含一个或几个同步方法,那么由此类生成的每一个对象都配备一个队列用来容纳那些等待执行同步的线程 ...

  4. [js - 算法可视化] 汉诺塔(Hanoi)演示程序

    前段时间偶然看到有个日本人很早之前写了js的多种排序程序,使用js+html实现的排序动画,效果非常好. 受此启发,我决定写几个js的算法动画,第一个就用汉诺塔. 演示地址:http://tut.ap ...

  5. Jsoup代码解读之六-防御XSS攻击

    Jsoup代码解读之八-防御XSS攻击 防御XSS攻击的一般原理 cleaner是Jsoup的重要功能之一,我们常用它来进行富文本输入中的XSS防御. 我们知道,XSS攻击的一般方式是,通过在页面输入 ...

  6. Jquery读取URL参数

    $(document).ready(function(){ function getQueryString(name) { var reg = new RegExp("(^|&)&q ...

  7. Oracle闪回操作

    Oracle闪回操作 1. 记录当前时间或SCN 在数据库变动前记录时间或SCN SQL> select  to_char(sysdate,'YYYY-MM-DD HH24:mi:ss') fr ...

  8. [cocos2dx笔记015]关于cocos2dx Button三种状态说明

    经过几天的填坑,最终将现有的项目由cocos2dx 2.2.2移到cocos2dx 3.2,差点放弃3.2了,但在最后一刻,又把坑填平了. cocos2dx 2.x到3.x是一个巨大的变化,能够算是全 ...

  9. Jquery的一些取值

    //获取当前节点的html代码(包括当前节点),prop用于获取与设置Html元素的原生属性 $("#tmpMsgObj").prop("outerHTML") ...

  10. mysql 时间差问题集锦

    SELECT * from grouptoadd where taskid = '103244'; select datediff(max(spreadtime),min(createtime)) f ...