function Person(){
}
Person.prototype={
constructor:Person,
name:"TIMY",
age:77,
job:"NEWS",
sayName:function(){
alert(this.name)}
};
var friend =new Person();
friend.sayName(); //输出'TIMY'
而
function Person(){
}
var friend =new Person();
Person.prototype={
constructor:Person,
name:"TIMY",
age:77,
job:"NEWS",
sayName:function(){
alert(this.name)}
};
friend.sayName(); //error
书上说,“重写整个原型后,构造函数与最初的原型就切断了联系,而实例的指针仅指向原型,而不指向构造函数”。
我不明白,重写后的原型中有sayName()这个方法,为什么调用不到,请问应该怎么理解这句话?
兄弟,你弄错了。。。
那么问题来了,为什么没有这个方法呢?
就酱!
楼上说了很多。。。。
其实问题的核心只有一点
就算你重写构造函数的原型后,实例的指针仍然指向其当初构造函数的原型
你进行重写后
你新原型的
constructor
属性指向Person
,但是实例friend
指向的原型仍然为Object.prototype
即
friend
的[[prototype]]
隐式属性仍然为Object.prototype
你重写了构造函数的原型不等于
实例
也会和构造函数
一起改变相应的指针要知道关键字
new
才是进行一系列原型传递的信号,你有兴趣可以看看