什么是原型链
参考 MDN 继承与原型链 - JavaScript | MDN (mozilla.org)
JavaScript 只有一种结构:对象。每个对象(object)都有一个私有属性指向另一个名为原型(prototype)的对象。原型对象也有一个自己的原型,层层向上直到一个对象的原型为 null。根据定义,null 没有原型,并作为这个原型链(prototype chain)中的最后一个环节。可以改变原型链中的任何成员,甚至可以在运行时换出原型
举例:
let a = []
a.__proto__ === Array.prototype // true
Array.prototype.__proto__ === Object.prototype //true
Object.prototype.__proto__ === null //true
上面xxx.__proto__ 在浏览器中用来表示 xxx的原型对象
遵循 ECMAScript 标准,应该用符号xxx.[[Prototype]] 来表示 xxx 的原型,在浏览器中打印xxx.[[Prototype]] 会报错,Object.getPrototypeOf()可以获得对象的原型对象,上面的例子 可以这样表示
Object.getPrototypeOf(a) === Array.prototype //true
Object.getPrototypeOf(Array.prototype) === Object.prototype //true
Object.getPrototypeOf(Object.prototype) === null //true
如何修改原型
- Object.setPrototypeOf 影响性能,不推荐使用
- Object.create 推荐使用
网友评论