• javascript原型与原型链个人理解


    想了解原型和原型链,我觉得首先我们得知道javascript里有一个Object 与 Function,它俩都是构造函数,当然函数也是一个对象。我们打印Object 与 Function看一下,

    console.log(Function)
    
    console.log(Object)

    那么这个Object 与 Function 之间有何关系与区别呢?首先您只需要记住:

    1. 所有普通对象都是 Object 的实例(也就是说Object是所有普通对象的爸爸);

    2. 所有普通函数都是 Function 的实例(也就是说Function是所有普通函数的爸爸);

    3. Function是 Object 的实例;(Object是所有对象的爸爸)

    构造函数与原型对象的区别:

     Object是构造函数,而Object.prototype是构造函数的原型对象。构造函数自身的属性和方法无法被共享,而原型对象的属性和方法可以被所有实例对象所共享。

    其次,constructor属性是原型对象上的一个属性,可以被所有实例对象所共享。要注意的是,prototype是构造函数的属性,而constructor则是构造函数的prototype属性所指向的那个对象,也就是原型对象的属性。由于constructor属性是一种原型对象和构造函数的关系,所以在修改原型对象的时候,一定要注意constructor的指向问题。

    接下来我们说重点,javascript里的__proto__ 和 prototype 属性。

    1. 所有的对象都有__proto__ 属性,可通过__proto__属性来访问这个对象的原型,而 __proto__ 指向的是它原型对象的prototype 属性(对象没有prototype属性);

    2. 所有的构造函数都有一个prototype 和 __proto__ 属性,而该函数的prototype属性指向的是它原型对象上的constructor属性。

    代码实例:

    复制代码
    var A = function () {} // 申明一个函数对象A;
    
    var B = new A(); // 为A创建一个实例B;
    
    console.log("A.prototype:", A.prototype);
    
    console.log("B.__proto__:", B.__proto__);
    
    console.log(A.prototype === B.__proto__);
    复制代码

     

     

    Prototype 的作用:

    可以为原型的实例设置公用的属性或方法;

    复制代码
    var A = function () {
    
        this.ary1 = [];
    
    }
    
    var B = new A();
    
    var C = new A();
    
    B.ary1.push(1);
    
    C.ary1.push(2);
    console.log(B.ary1)    

    console.log(C.ary1)   
    复制代码
    复制代码
    A.prototype.ary2 = [];
    
    B.ary2.push(1);
    
    C.ary2.push(2);
    
    console.log(B.ary2); 
     

    最后总结下什么是原型链:

    所有的对象都有一个__proto__属性,我们通过对象的__proto__属性一层层的向上访问,最终会得到值null;那么我们访问的整个路径就是这个对象的原型链。

    (感觉个人理解还是不够深刻,这里只是记录一下自己目前对于原型链的理解,多多指教!)

     
  • 相关阅读:
    Design Patterns
    Interview
    ListView Optimization
    android onclick onLongClick ontouch dispatchTouchEvent onInterceptTouchEvent
    java hashcode equals
    Android res/raw vs assets
    HttpClient -- 血的教训
    How Android Draws Views
    元数据 metadata
    Git-2
  • 原文地址:https://www.cnblogs.com/maxiansheng/p/11303126.html
Copyright © 2020-2023  润新知