对JS原型链的总结及粗浅理解

1、只有函数(Function)才有prototype属性,所有对象(Object)都有__proto__属性。

2、proto === [[Prototype]] ,前者大部分浏览器支持,[[Prototype]]是标准属性。

3、prototype属性中的constructor指向构造函数本身。

4、Object​.prototype.__proto__已经从 Web 标准中删除,虽然一些浏览器目前仍然支持它,但会在未来的某个时间停止支持。

5、以字面量方式创建的对象,其属性__proto__指向构造函数Object的prototype,prototype再指向Object的原型对象,该对象无__proto__属性,但有get __proto__和 set proto

6、以构造器(构造函数)方式创建的对象,其属性__proto__指向构造对应构造函数的prototype,prototype再指向该构造函数的原型对象,该原型对象的__proto__属性再指向该构造函数的构造函数,依次循环,直至指向构造函数Object的prototype,prototype再指向Object的原型对象。
红线
7、以Object.create()方式创建的对象,其属性__proto__指向情况比较特殊:

var a = {name : shawyu}
var b = Object.create(a);
console.log(b.__proto__); //{name : shawyu}
console.dir(b); //Object
console.log(b.__proto__ === b.constructor.prototype); //false

更多学习推荐
https://www.cnblogs.com/libin-1/p/5820550.html
https://www.cnblogs.com/chengzp/p/prototype.html

猜你喜欢

转载自blog.csdn.net/PrisonersDilemma/article/details/89318495