zoukankan      html  css  js  c++  java
  • 如何理解和描述“原型和原型链”

    JavaScript中的对象,都有一个内置属性[[Prototype]],
    指向这个对象的原型对象。当查找一个属性或方法时,
    如果在当前对象中找不到定义,会继续在当前对象的原型对象中查找;
    如果原型对象中依然没有找到,
    会继续在原型对象的原型中查找(原型也是对象,也有它自己的原型);
    如此继续,直到找到为止,或者查找到最顶层的原型对象中也没有找到,
    就结束查找,返回undefined。可以看出,这个查找过程是一个链式的查找,
    每个对象都有一个到它自身原型对象的链接,这些链接组成的整个链条就是原型链。
    拥有相同原型的多个对象,他们的共同特征正是通过这种查找模式体现出来的。

    其实原型链就是多个对象通过 _proto_ 的方式连接起来,并且可以向上寻找对应的属性。这种关系,就是“原型链”。
    对象的__proto__属性指向原型,__proto__将对象和原型连接起来组成了原型链。

    用一个简单、明了、实际的例子来说明:

    有一天,我想买一辆车,想知道这辆车从设计生产到出厂的一些过程,我们假设这个过程就是这辆车的原型链:

      

    1. 有一个构造函数是制造这辆车的机器
    
    function CarDemo(data) {
        this.name = data;
    }
    2. 这个构造函数创建的实例的原型,就是机器要使用的模具,也可以说是设计图
    
    CarDemo.prototype = {
        color: red,
        size: 4800,
        brands: BBA
    }
    3. 然后生成出来的对象,就是这辆车,这辆车包括了设计图上的所有属性
    
    var mycar = new CarDemo("zlz");
    
    PS: 我的这辆车就继承了构造函数 CarDemo 的原型里的属性: 
      mycar.color 是 red
      mycar.size 是 4800
      mycar.brands 是 BBA
    等式关系:
    CarDemo === CarDemo.prototype.constructor;
    mycar.__proto__ === CarDemo.prototype;


    总结:
    
    1. Object是所有对象的爸爸,所有对象都可以通过__proto__找到它。
    
    2. Function是所有函数的爸爸,所有函数都可以通过__proto__找到它.
    
    3. 函数的prototype是一个对象。
    
    4. 对象的__proto__属性指向原型,__proto__将对象和原型连接起来组成了原型链。

    5. 对于obj来说,可以通过__proto__找到一个原型对象,在该对象中定义了很多函数让我们来使用。
     
  • 相关阅读:
    主要几种通信协议的性能比较(转载)
    mina与spring集成(翻译)
    DF标志和串传送指令
    编写不会产生除法溢出的子程序
    转: 匈牙利标记法
    转:四种方式实现从尾到头输出单向链表(链表逆序打印)
    汇编语言注释标记符
    汇编将数据以十进制格式显示在屏幕上
    转:汇编寄存器的使用
    蒙特卡罗算法 求数组主元素
  • 原文地址:https://www.cnblogs.com/panic404/p/13499850.html
Copyright © 2011-2022 走看看