这似乎取决于原型声明的顺序。这是代码:
function Person(firstname){
this.firstname = firstname;
}
//Person.prototype.middlename = "Charles"; //this line doesn't work here
Person.prototype = {
constructor: Person,
lastname: "Claus"
}
Person.prototype.middlename = "Charles"; //this line works here
var person1 = new Person("Santa");
console.log(person1.firstname, person1.middlename, person1.lastname);
这是一个链接: https://jsfiddle.net/tdz0yrs2/
答案 0 :(得分:2)
这种陈述:
Person.prototype = {
// ...
};
将构造函数的prototype属性重置为一个全新的对象。在该点之前设置的任何属性都将保留在旧原型对象上,但不会出现在新构造的对象中。
这里的关键点是像这样的对象文字作品不会添加属性 - 它会创建一个全新的对象。
答案 1 :(得分:1)
与Pointy所说的相同。
您需要将新函数添加到原型中而不会覆盖整个对象:
Person.prototype.someFunction = function() { ... };
或使用underscore' s extend
之类的内容将新属性混合到现有原型中:
_.extend(Person.prototype, {
// ...
});