JavaScript原型链详解

理解JavaScript中的原型链。

一、概念

  JS里面的对象可能会有父对象,父对象还会有父对象,。。。。。祖先,类似家族族谱。
  其中,构造函数的prototype对象,称为原型对象。
  例如:

    function Person(name,age){
        this.name=name;
        this.age=age;
        this.say=function(){}
    }
    var p1=new Person();
    var p2=new Person();
    var p3=new Person();

  Person.prototype是 p1 p2 p3 的原型对象,即Person.prototype是Person构造函数的实例的原型对象。
  同理,因为Person的构造函数是Function,所以Person的原型对象是:Function.prototype

二、原型链的根本:继承

  JS的对象中几乎都会有一个__proto__属性,指向它的父对象,可以实现让该对象访问到父对象中相关属性。
  关于继承,可以查看JS中的继承一文。

三、原型链的根对象:Object.prototype

  对于 var arr=[1,3,5]
  通过 arr.__proto__ 找到 Array.prototype
  通过 arr.__proto__.__proto__ 找到 根对象

    function Animal(){}
    var cat=new Animal();
    // cat.__proto__:Animal.prototype
    // cat.__proto__.__proto__:根对象

  错误的理解:万物继承自Object
  正确的理解:万物继承自Object.prototype

四、总结

  • 原型链是通过继承实现的关系图
  • 继承的核心是通过__proto__将若干个对象连接起来
  • 整个原型链的根对象是Object.prototype


  目录