什么是原型
原型是js中非常特殊一个对象,当一个函数创建之后,会随之就产生一个原型对象,当通过这个函数的构造函数创建了一个具体的对象之后,在这个具体的对象中就会有一个属性指向原型。
原型的详细分析过程
- 第一步
function Person(){
}
图形分析:
第一种状态以上是第一种状态:function Person(){},Person函数中有一个prototype的属性指向Person的原型对象,在原型对象中有一个constructor的属性指向了Person函数,所以可以通过new Person创建对象。
- 第二步
Person.prototype.name = "Leon";
Person.prototype.age = 23;
Person.prototype.say = function() {
alert(this.name+","+this.age);
}
图形分析:
第二种状态通过Person.prototype.xxx为原型设置值后,这些属性和方法都是设置在Person的原型中的。
- 第三步:
var p1 = new Person();
p1.say();
图形分析:
第三种状态当使用Person创建了对象p1之后,会在对象中有一个 prop_属性(这个属性是不能被访问的)指向了原型,当使用对象调用原型的时候,首先会在对象的内部寻找是否存在这个属性,如果没有,就会通过prop去原型中寻找属性,所以当调用p1.say(),在自己的空间中不存在这个方法,就会找到原型中的该方法并调用。
- 第四步:
var p2 = new Person();
p2.name = "Ada";
p2.say();
图形分析:
图片.png当创建了一个新的p2后,依然会有一个prop属性指向原型,此时如果通过p2.name设置了属性之后,会在自己的内存空间存储name的值,当调用say方法的时候就在自己的内存空间中找到了name而不会再去原型中找了。(特别注意:原型中的值不会被替换,仅仅只是在查找时被覆盖)
至此,对象的创建和原型的分析完毕!
文章写太长懒得看,明天继续总结
网友评论