zoukankan      html  css  js  c++  java
  • 原型链的理解

    原型链

    • 本文将从将从什么是原型链,原型链的主要作用,以及函数和对象之间的关系,继承来说。
    什么是原型链?
    • 实例对象和原型对象之间形成的链式结构。
    原型的主要作用是什么?
    • 数据共享,实现继承
    函数和对象的神秘之处
    • 函数属于对象
       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的方法,这就是所谓的继承。
  • 相关阅读:
    遇到的问题(css设置background 和 JS获取元素属性)
    布局
    CSS基础总结
    慕课网课程学习--焦点轮播图
    慕课网课程学习--JS事件探秘
    慕课网课程学习--信息排列效果
    HTML5-drag/drop
    "javax.servlet.http.HttpServlet" was not found on the Java Build Path
    Description Resource Path Location Type Target runtime apache-tomcat-8.0.30 is not defined.
    Spring注解
  • 原文地址:https://www.cnblogs.com/lml-lml/p/7096299.html
Copyright © 2011-2022 走看看