我们晓得,挪用组织函数时会为实例增加一个指向最初原型的指针,而把原型修改成别的一个对象就即是切断了组织函数与最初原型之间的联络。
怎样明白这句话,下面我们经由过程实例来诠释下,若有不对,请斧正,谦虚受教。
function Person(){
}
Person.prototype.sayName=function(){
alert("TONY");
}
var friend1=new Person();
var keys1=Object.keys(Person.prototype);
//重写原型
Person.prototype = {
constructor:Person,
name:"TIMY",
age:29,
job:"SOFT ENGINEER",
sayName:function(){
alert(this.name);
}
};
var friend2=new Person();
var keys2=Object.keys(Person.prototype);
friend1.sayName(); //TONY
friend2.sayName(); //TIMY
alert(keys1); //sayName
alert(keys2); //constructor,name,age,job,sayName
为何friend1和friend2输出的效果差别,由于friend1时还没有重写,friend2时已重写原型。
那末题目来了,这中心指针是怎样指向的?
由于在实例化的时刻,firend1的原型指针指向了组织函数的原型对象,这个的原型对象只要一个sayName要领,输出的是TONY。
随后,给组织函数附上了新的原型对象,行将组织函数指向新的原型对象,然则实例friend1的原型指针依旧还傻傻的指向本来的空原型对象{}
这个时刻再实例化的对象friend2,就有了新的原型的sayName要领了,输出是TIMY。
- 实在经由过程
Object.keys(Person.prototype)
语句就看出了差别情况下原型的一切属性和要领。
重写前指向的是最初原型,只要一个sayName要领,重写后,组织函数就指向了新的原型,虽然新的原型也有sayName要领,然则注重,这已不是之前的了,只是名字雷同罢了。
就酱紫滴,还在进修中。。。