每一个函数都有一个prototype属性,指向原型对象,
prototype (原型对象)的所有属性和方法,都会被构造函数的实例对象所继承。
因此,我们可以把那些公用的(不变的)的属性和方法,定义在原型对象(prototype)上 。
构造函数 prototype 属性指向与 构造函数实例所创建的对象 的__proto__属性指向的是同一个对象。
原型对象可以向所有实例对象共享他的属性和方法,因此,不用在构造函数中定义对象信息,而是可以直接将这些信息添加到原型中。
let arr = []
console.log('arr.__proto__', arr.__proto__);
console.log('arr.__proto__ === Array.prototype', arr.__proto__ === Array.prototype);
console.log('arr.__proto__.__proto__',arr.__proto__.__proto__);
console.log('arr.__proto__.__proto__ === Object.prototype',arr.__proto__.__proto__ === Object.prototype);
__proto__ => __proto__ => __proto__ => null
[] Array.prototype Object.prototype
[] instanceof Array;
{} instanceof Object;
从 instanceof 能够判断出 [ ].__proto__ 指向 Array.prototype,
而 Array.prototype.__proto__ 又指向了Object.prototype,
最终 Object.prototype.__proto__ 指向了null,标志着原型链的结束。
****因此,[]、Array、Object 就在内部形成了一条原型链
我的博客:https://karlfranz.cn/