原型和原型链简单分析

170 阅读1分钟

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 === functionObject = new Function() 所以它也是{},也有__proto__,而且__ proto__ 链接的是 Function,

Function是一个函数,所以Function也是有prototype的,

而且 Function.prototype === Function.__ proto __ (底层写死),

最终得出:

Object.__ proto __ === Function.prototype,所有的原型链的终点就是Function,而且 Function.prototype === Function.__ proto __