在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
方法。
最佳答案
is it possible to redefine the class's method later?
是的。但是,您不能将新函数分配给 Person
构造函数的属性,而是分配给实例本身:
var p2 = new Person("Sue");
p2.sayHello(); // Hello, Sue
p2.sayHello = function() {
alert('Hola, ' + this.name);
};
p2.sayHello(); // Hola, Sue
如果您想自动为所有新实例执行此操作(并且没有使用该方法的原型(prototype),您可以像@dystroy 的回答那样轻松地交换原型(prototype)),您将需要 decorate构造函数:
Person = (function (original) {
function Person() {
original.apply(this, arguments); // apply constructor
this.sayHello = function() { // overwrite method
alert('Hola, ' + this.name);
};
}
Person.prototype = original.prototype; // reset prototype
Person.prototype.constructor = Person; // fix constructor property
return Person;
})(Person);
关于javascript - 是否可以重新定义 JavaScript 类的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21243790/