美文网首页
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