原型链
有用的参考:
上面参考中递进的图片实例
一个构造函数可以生成多个实例, 因此没有原型指向实例的箭头
真的是继承吗?
继承意味着复制操作,然而 JavaScript 默认并不会复制对象的属性,相反,JavaScript 只是在两个对象之间创建一个关联,这样,一个对象就可以通过委托访问另一个对象的属性和函数,所以与其叫继承,委托的说法反而更准确些。
更全面的原型链图
要想理解这两张图,最好的做法是推演一下这几个表达式:
自己总结
instanceof
instanceof
运算符用于检测构造函数的 prototype
属性是否出现在某个实例对象的原型链上。
只有函数有原型链
不要再使用 __proto__
__proto__
属性没有写入 ES6 的正文,而是写入了附录。
原因是它本质上是一个内部属性,而不是一个正式的对外的 API,只是由于浏览器广泛支持,才被加入了 ES6。
标准明确规定,只有浏览器必须部署这个属性,其他运行环境不一定需要部署,而且新的代码最好认为这个属性是不存在的。
推荐使用 Object.getPrototypeOf Object.setPrototypeOf Object.create
所以无论从语义的角度,还是从兼容性的角度,都不要使用这个属性,应该使用:Object.getPrototypeOf(target)
(读操作)、Object.setPrototypeOf(target)
(写操作)、Object.create(target)
(生成操作)代替
最后更新于