原型链的理解

怎甘沉沦 提交于 2020-02-09 18:31:21

原型链

  • 本文将从将从什么是原型链,原型链的主要作用,以及函数和对象之间的关系,继承来说。

    什么是原型链?
  • 实例对象和原型对象之间形成的链式结构。

    原型的主要作用是什么?
  • 数据共享,实现继承

    函数和对象的神秘之处
  • 函数属于对象
   function fn(){
        console.log(123);
     }
     console.log(fn instanceof Object);
+ 上面的代码结果是true。可以证明函数是对象的一种。我们经常又说对象都是函数创建的,在这我来做个解释,这俩句话并不冲突。我们创建对象的时候可以通过构造函数实例化,new Object(),new Array()等方式。
  • 对象是由函数创建出来的
    ```
    //var obj = { a: 10, b: 20 };
    //var arr = [5, 'x', true];

      var obj = new Object();
      obj.a = 10;
      obj.b = 20;
    
      var arr = new Array();
      arr[0] = 5;
      arr[1] = 'x';
      arr[2] = true;
    + 而Object和Array又是函数
    console.log(typeof (Object)); // function
    console.log(typeof (Array)); // function
    ```
    • 既证明了函数是对象,又证明了对象是函数创建出来的,下面来深入理解下原型。

      原型prototype
  1. 所有的函数都是Function的实例对象,在构造函数上都有一个原型属性prototype,该属性也是一个对象,此对象上有construction属性指向原型所属的构造函数,还有__proto__属性。此外,每个实例对象上也都有proto属性,指向构造函数的原型,这个属性只在浏览器内部使用。
  2. 实例对象的__proto__===构造函数的prototype。
  3. obj.__proto__===Object.prototype ---(特别的)
  4. Function.__proto__===Function.prototype ---(特别的)
  5. Function是一个函数,函数也是一种对象,也有__proto__属性,函数又都是被Function创建的,即Function是被自身创建的,他的__proto__指向了自身的prototype。
  6. 补充:instanceof(用于判断一个变量是否某个对象的实例).判断规则(A instanceof B),顺着A的__proto__属性这条线找,同时沿着B的prototype的这条线找,如果能找到同一个引用,返回true,即是这个对象的实例。

    继承
  • instanceof表示的就是一种继承关系,或者是说原型链的结构,所有的对象的原型链都会找到Object.prototype,所以所有的对象都会有Object.prototype的方法,这就是所谓的继承。
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!