在JavaScript中使用构造函数创建类时,是否可以稍后重新定义类的方法?
例子:
function Person(name)
{
this.name = name;
this.sayHello = function() {
alert('Hello, ' + this.name);
};
};
var p = new Person("Bob");
p.sayHello(); // Hello, Bob
现在我想重新定义 sayHello
像这样:
// This doesn't work (creates a static method)
Person.sayHello() = function() {
alert('Hola, ' + this.name);
};
所以当我创建另一个 Person
时,将调用新的 sayHello
方法:
var p2 = new Person("Sue");
p2.sayHello(); // Hola, Sue
p.sayHello(); // Hello, Bob
编辑:
我意识到我可以将“Hello”或“Hola”之类的参数发送到 sayHello
以完成不同的输出。我还意识到我可以像这样简单地为 p2 分配一个新函数:
p2.sayHello = function() { alert('Hola, ' + this.name); };
我只是想知道我是否可以重新定义类的方法,以便 Person
的新实例将使用新的 sayHello
方法。
原文由 tronman 发布,翻译遵循 CC BY-SA 4.0 许可协议
是的。但是,您不能将新函数分配给
Person
构造函数的属性,而是分配给实例本身:如果您想自动为所有新实例执行此操作(并且没有使用该方法的原型,您可以像@dystroy 的回答那样轻松地交换它),您将需要 装饰 构造函数: