HOME/Articles/

JS原型链

Article Outline

JS原型链

<!--more-->

JS原型链

回顾一下类,实例,prototype,__proto__的关系

    function People (name,age) {
        this.name = name;
        this.age = age;
    }
    People.prototype = {
        sayName: function () {
          console.log(this.name);
        },
    }
    var p1 = new People('deejay',21);
    p1.sayName();

类,实例,prototype,__proto__

另外有:

    p1.__proto__.constructor === People; // true
    People.prototype.constructor === People; //true
    p1.constructor === People; //true

对于p1.construcror来说,在p1中找不到相应的属性,就回到__proto__中寻找,其实找到的是People.prototype中的constructor,和第2行等价

任何一个对象,只要是一个对象,那么总有一个函数创建了它,这个对象的__proto__属性等于创建它的函数的prototype 比如说People.prototype也是一个对象,也有__proto__属性,其中的constructor指向了Object(),即是Object()创建的对象,其prototype属性等于People.prototype.__proto__.

###详细的原型链

原型链

在上图中有几个需要注意的特殊点:

  • Object.prototype.__proto__为null,其实就是不存在
  • Function.prototype也是一个对象,即也是Object()创建的
  • 对于Function自身来说,也是一个对象,也有__proto__属性,Function.__proto__.constructor === Function,即Function创建了所有的函数,包括他自己。
  • 对于Object.__proto__.constructor === Function,还是那句话,Function创建了所有的函数,包括他自己。