1

我正在为 web 开发人员阅读专业的 javascript,他们提供以下内容:

此代码有效:

var friend = new Person();

Person.prototype.sayHi = function(){
    alert("hi");
};

friend.sayHi();

但这段代码没有:

function Person(){
}

var friend = new Person();

Person.prototype= {
   constructor: Person,
   name: "Nicholas",
   age: 29,
   job: "Software Engineer",
   sayName: function () {
       alert(this.name);
   }
};

friend.sayName();

我知道,在第二个示例中,原型是在friend实例化变量之后定义的,但在这种情况下,为什么第一个示例有效?

4

1 回答 1

4

在第一个片段中,您将添加到已经提供给实例的现有原型。在第二个中,您正在为 的创建一个新原型Person,该原型与已经提供给 的原型对象不同friend

如果要向原型添加新函数,则可以在调用该函数之前的任何时间进行。需要在实例化新实例之前将新对象分配给构造函数的原型。

于 2013-03-10T22:33:55.447 回答