当我使用对象文字添加原型属性时,上游直接原型类型属性会中断。为什么?

时间:2015-06-24 22:00:05

标签: javascript

这似乎取决于原型声明的顺序。这是代码:

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/

2 个答案:

答案 0 :(得分:2)

这种陈述:

Person.prototype = {
  // ...
};

将构造函数的prototype属性重置为一个全新的对象。在该点之前设置的任何属性都将保留在原型对象上,但不会出现在新构造的对象中。

这里的关键点是像这样的对象文字作品不会添加属性 - 它会创建一个全新的对象。

答案 1 :(得分:1)

与Pointy所说的相同。

您需要将新函数添加到原型中而不会覆盖整个对象:

Person.prototype.someFunction = function() { ... };

或使用underscore' s extend之类的内容将新属性混合到现有原型中:

_.extend(Person.prototype, { 
    // ...
});