javascript:如何覆盖某个类的所有实例的方法
javascript: How to override a method for all the instances of some class?
function Person(){
this.scream = function(){
alert('NO NO NO!!!!');
};
}
var steve = new Person();
steve.scream() // NO NO NO!!!!
Person.prototype.scream = function(){
alert('YES YES YES!!!!');
}
steve.scream() // still NO NO NO!!!!
是否有一种方法可以覆盖'尖叫'而不显式引用steve ?考虑有多个Person实例的情况。
不,
有了Person
声明,每次你为它创建一个新的"实例"时,"构造函数"都会运行,你将创建一个全新的scream
函数(闭包),除了新创建的对象steve.scream
之外,你没有任何引用。
作为一种选择,你可以这样做:
function Person(){}
Person.prototype.scream = function(){
alert('NO NO NO!!!!');
}
var steve = new Person();
steve.scream() // NO NO NO!!!!
Person.prototype.scream = function(){
alert('YES YES YES!!!!');
}
steve.scream() // this time is YES YES YES!!!!
在这种情况下,初始scream
"方法"仅在原型上的一个地方可用,并且您可以为所有"实例"覆盖它。
function Person(){};
Person.prototype.scream = function(){ alert('NO NO NO!!!!'); };
var steve = new Person();
steve.scream();
Person.prototype.scream = function(){alert('YES YES YES!!!!');};
steve.scream();
,如果你想继续使用你的代码风格,你可能喜欢
function Person(){
this.constructor.prototype.scream = function(){
alert('NO NO NO!!!!');
};
}
var steve = new Person();
steve.scream();
Person.prototype.scream = function(){ alert('YES YES YES!!!!'); };
steve.scream();
相关文章:
- 在Javascript中对类的每个实例调用一个方法
- 为什么可以't我使用成员方法初始化一个实例
- 从实例方法调用实例方法
- 向模板实例变量传递调用方法调用的结果时出现异常
- 如何理解“当类实例化时,JavaScript静态方法也是不可调用的”
- Javascript:在对象实例方法上使用apply()方法失败
- 何时需要使用Object.assign()方法来复制对象的实例
- 我应该在原型上还是在新创建的实例上调用构造函数方法
- 我将如何创建一个带有私有变量的实例方法
- 用javascript在实例方法中实例化对象
- 使用lodash'扩展JS对象实例;s的extend方法会导致奇怪的结果
- 在canjs中,根据任何模型实例的存在,有条件地显示胡子模板部分的最常用方法是什么
- 附加到 DOMWindow 实例而不是自身实例的嵌套方法调用
- 绑定实例方法与包装匿名函数
- 有没有一种方法可以记录在javascript中创建了多少个实例
- 为什么't括号,用于链接内置JavaScript方法的此实例
- 使用对象方法实例化新的对象 JavaScript
- 方法实例Javascript的创建
- JavaScript OOP:在一个对象中同时运行两个方法实例
- 从方法实例访问这个变量