以后可以重新定义类的方法吗?
是。但是,您不得将新功能分配给
Person构造函数的属性,而应分配给实例本身:
var p2 = new Person("Sue");p2.sayHello(); // Hello, Suep2.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);


