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!!!!
有没有办法在不明确引用史蒂夫的情况下覆盖' 尖叫 '?考虑一下您可能有 人 的情况。
答案 0 :(得分:2)
没有
拥有Person
声明,每次你创建一个新的“实例”时,“构造函数”将运行,你将创建一个全新的scream
函数(闭包),你不能t除了新创建的对象之外,还有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
“方法”仅在原型上的一个位置可用,您可以为所有“实例”覆盖它。
答案 1 :(得分:1)
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();
答案 2 :(得分:0)
并且,如果您想继续使用您的代码样式,您可能会喜欢
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();