1.
更改原型时,切记要设置构造函数属性手动将原型设置为新对象有一个关键的副作用。它会擦除该constructor
属性!此属性可用于检查哪个构造函数创建了实例,但是由于该属性已被覆盖,因此现在给出错误的结果:
duck.constructor === Bird;
duck.constructor === Object;
duck instanceof Bird;
为了,这些表达式将评估为false
,true
和true
。
要解决此问题,每当将原型手动设置为新对象时,请记住定义constructor
属性:
Bird.prototype = {
constructor: Bird,
numLegs: 2,
eat: function() {
console.log("nom nom nom");
},
describe: function() {
console.log("My name is " + this.name);
}
};