prototype
每个函数都存在一个 prototype,它是一个对象 {}
__ proto __
每个对象都存在一个__proto__ ,它也是一个对象 {},它实际上是一个连接点,连接着下一个 prototype
进入套娃模式:
var a = function() {
};
var b = new a();
console.log(b);
b: {
__proto__: a.prototype === {
__proto__: Object.prototype === {
__proto__: null
}
}
}
这就是一个原型链: 以一个对象为基准,以__proto__为连接点,一直延伸到Object的链式结构。
原型链的继承(原型继承)
var a = function() {
this.name1 = 1;
}
a.prototype.name2 = 2;
Object.prototype.name3 = 3
Object.prototype.name2 = 4
var b = new a();
console.log(a.name1); // 1
console.log(a.name2); // 2
console.log(a.name3); // 3
delete a.prototype.name2;
console.log(a.name2); // 4
原型链继承:如果当前对象里面没有,就会往下一层的prototype去找,直到找到Object为止。
Function / Object: 既是函数又是对象
通过typeof Object === function 得 Object = new Function() 所以它也是{},也有__proto__,而且__ proto__ 链接的是 Function,
Function是一个函数,所以Function也是有prototype的,
而且 Function.prototype === Function.__ proto __ (底层写死),
最终得出:
Object.__ proto __ === Function.prototype,所有的原型链的终点就是Function,而且 Function.prototype === Function.__ proto __