是否可以重新定义JavaScript类的方法?
在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
方法。
回答:
以后可以重新定义类的方法吗?
是。但是,您不得将新功能分配给Person
构造函数的属性,而应分配给实例本身:
var p2 = new Person("Sue");p2.sayHello(); // Hello, Sue
p2.sayHello = function() {
alert('Hola, ' + this.name);
};
p2.sayHello(); // Hola, Sue
如果要对所有新实例自动执行此操作(并且尚未使用该方法的原型,可以轻松地像@dystroy的答案中那样进行交换),则需要装饰构造函数:
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类的方法? 的全部内容, 来源链接: utcz.com/qa/409487.html