function Person(name) {
this.name = name;
}
Person.prototype = {
sayName: function() {
console.log(this.name);
},
toString: function() {
return "[Person " + this.name + "]";
}
};
当我在原型中传递对象文字时,它会更改构造函数属性,因此它现在指向Object
而不是Person
。为什么这样 ?请别人解释一下。
答案 0 :(得分:1)
您只需将Person.prototype
设置为对象即可。对象constructor
为Object
,因此Person
的构造函数也变为Object
。你有什么期望?
您可以逐个设置属性,也可以只添加构造函数属性:
function Person(name) {
this.name = name;
}
Person.prototype = {
sayName: function() {
console.log(this.name);
},
toString: function() {
return "[Person " + this.name + "]";
},
constructor: Person
};
正如TravisJ评论的那样,使用Object.defineProperty
设置它可能会更好,这样我们就可以将可枚举性设置为false,因为它是默认的。
Object.defineProperty(Person.prototype, 'constructor', {
configurable: true,
writable: true,
enumerable: false, // this is the default; including as an example
value: Person
});
答案 1 :(得分:0)
默认情况下,原型指向一个对象,其属性(命名构造函数)是被调用函数的名称。
此属性基本上告诉从哪个函数或父元素构造新对象。
当您使用自定义对象文字覆盖它时,此信息将丢失。通常当找不到属性时,它会在原型链中查找,在这种情况下,它会在" Object"中找到构造函数属性。您可以在文字中添加构造函数属性。这样查找将停止在您创建的新对象上。