我很困惑为什么在运行此代码时会替换全局alert()
函数...我在这里没有使用prototype
。
Moo = (function(){
this.alert = function(s){
console.log("Replaced Alert! " + s);
};
return this;
})();
alert("poit");
当我运行代码时,我没有得到警告弹出窗口,而是运行上面的代码,我看到文本出现在我的控制台中。有人可以解释一下吗?
答案 0 :(得分:8)
this
引用window
。所以,你要覆盖全局alert
方法。
如果要使用方法alert
创建新对象,请使用:
Moo = (function(){
var obj = {};
obj.alert = function(s){
console.log("Replaced Alert! " + s);
};
return obj;
})();
另一种方法:
Moo = (function(){
var obj = new function(){};
obj.prototype.alert = function(){...}
return new obj;
})();
答案 1 :(得分:3)
如上所述,问题是在你的情况下, this 引用 window (因为你不在构造函数中)。
你不想这样做吗? :
Moo = new (function(){
this.alert = function(s){
console.log("Replaced Alert! " + s);
};
return this;
})();
使用新关键字
答案 2 :(得分:0)
this
被评估为全局上下文(window
)。
JavaScript中this
的语义并不总是您所期望的。