美文网首页
JavaScript之prototype随笔

JavaScript之prototype随笔

作者: ?尛孞 | 来源:发表于2019-03-12 21:13 被阅读0次

    只要提到JavaScript中对象的概念,那么必然离不开prototype这个东西。这里自己写点关于prototype的一些理解,以便以后查阅和复习。

    何谓prototype,顾名思义,即为原型之意。这里边有一个比较绕的东西,那就是原型链了。

    原型链牢记这样的两句话:

    Object构造函数的prototype指向的是Object的原型对象

    Object原型对象的constructor指向的是Object的构造函数

    代码输出如下:

    Object.prototype.constructor

    // ƒ Object() { [native code] }

    //构造函数

    Object.constructor

    // ƒ Function() { [native code] }

    //构造函数

    Object.constructor.prototype

    // ƒ () { [native code] }

    Object.prototype

    // 原型对象

    Object.prototype.constructor.prototype

    //原型对象

    Object.constructor.prototype.constructor

    ƒ Function() { [native code] }

    构造函数、原型和实例的关系:每个构造函数都有一个原型对象,原型对象都包含一个指向构造函数的指针,而实例都包含一个指向原型对象的内部指针。

    即:

    var obj = new Object();

    console.log(Object.prototype.constructor == Object); //true

    console.log(Object.prototype == obj.__proto__); //true

    console.log(Object.prototype._proto__ == null); //true

    任何对象都有一个__proto__属性 

    任何函数都有一个prototype属性,prototype也是一个对象 ,所以其中也有一个___proto__

    这里有一个非常有意思的结果

    console.log(Object instanceof Function); //true

    console.log(Function instanceof Object); //true

    //①构造器Function的构造器是它自身

    console.log(Function.constructor=== Function); //true

    //②构造器Object的构造器是Function(由此可知所有构造器的constructor都指向Function)

    console.log(Object.constructor === Function;) //true

    //③构造器Function的__proto__是一个特殊的匿名函数function() {}

    console.log(Function.__proto__); //function() {}

    //④这个特殊的匿名函数的__proto__指向Object的prototype原型。

    console.log(Function.__proto__.__proto__ === Object.prototype); //true

    console.log(Object.__proto__.__proto__ === Object.prototype); //true

    //⑤Object的__proto__指向Function的prototype,也就是上面③中所述的特殊匿名函数

    console.log(Object.__proto__ === Function.prototype); //true

    console.log(Function.prototype === Function.__proto__); //true

    相关文章

      网友评论

          本文标题:JavaScript之prototype随笔

          本文链接:https://www.haomeiwen.com/subject/iiqikqtx.html