JavaScipt原型
2020-07-04 本文已影响0人
Poppy11
我们先定义一个构造器(函数):
function People(a,b,c){
this.height = a;
this.weight = b;
this.age = c;
}
原型对象
原型是个很抽象的概念,因为我们并不能看到它。当定义了一个构造器(也就是创建一个函数)的时候,就会产生一个原型对象。这个构造器所构造的对象,都会从原型对象中继承到属性,方法等,我们定义一个小明‘xiaoming’对象,并打印出来:
var xiaoming = new People(170,60,18);
console.log(xiaoming);
在控制台可以看到:

检查小明对象的proto属性,也就是小明对象的构造器的原型对象,我们会发现它实际上就是上面我们看过的People构造器的原型对象(People.prototype)。
那么什么是原型链呢?
其实理解了原型,就很好理解原型链了,我们发现小明对象继承自People构造器的原型对象,而People构造器的原型对象又是从哪继承的呢?
__proto__:Object
object(对象)就是People原型对象的构造函数,点开它会发现它不再拥有proto属性了,也就是它的proto属性是null,这就说明寻找构造函数到头了,这就是所谓的原型链的终点。
事实上,随便定义一个对象:
var xiaohei = {
height:180,
weight:80,
age:20
}
然后去控制台打印出来:
console.log(xiaohei);
会显示:

它并没有一个构造函数,它的原型对象的构造函数就是object构造函数,事实上在JavaScript中不管什么对象,只要顺着它的proto属性往上寻找,就必然会回到object构造函数,也就是说JavaScript中任何对象都是object的实例。这就是原型链。