• 《JavaScript权威指南》拾遗(下)


    一.类和原型
            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;
            
     
  • 相关阅读:
    D3使用方法
    CSS3 Media Queries
    前端软件sublime的一些常用快捷键
    如何引入外部图标集及使用方法——以bootstrap图标集为例
    如何引入外部font文字
    纯css3实现 transtion过渡效果
    svn检出项目
    关于a标签自身的click事件所带来的一些影响
    在服务器上建好的组成员如何和建好的TFS团队项目二者联系起来
    在VS上添加TFS团队项目时报错TF218027的完美解决方法
  • 原文地址:https://www.cnblogs.com/fireflow/p/4823814.html
Copyright © 2020-2023  润新知