如何理解和描述“原型和原型链”

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

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

 

用一个简单、明了、实际的例子来讲明:函数

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

  

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__
相关文章
相关标签/搜索