(js原型继承问题)更改自定义构造函数的原型可能发生的一些问题

如果自定义了一个构造函数,并且通过这个构造函数创建了一个对象

function Old(name, age) {
this.name = name;
this.age = age;
}
var a = new Old("xb", 19)

如果后面给这个自定义构造函数添加属性,这个时候还是能获取到的(因为复杂数据类型不同于基本数据类型,复杂数据类型可以任意的添加修改)

Old.prototype.height = 190
console.log(a.height);//190

但是如果在后面更改这个构造函数的原型

Old.prototype = {
Height:280
}
console.log(a.height);//190

这时候打印 a.height还是显示190,因为当刚刚开始创建这个对象的时候,原型的地址已经指向一个地址
现在去更换这个原型并且指向另外一个新的原型, a.height获取的还是老的构造函数的原型 所以还是返回原本的数值

var b = new Old("xx", 99)
console.log(b.height);//280

如果继续创建一个对象b 这个对象b的原型即可指向新的原型
注意(系统自带的构造函数 比如Object Array 等的原型只能添加不能去替换)

Last modification:July 16th, 2019 at 10:13 am
If you think my article is useful to you, please feel free to appreciate

Leave a Comment