Javascript Alert()被替换

时间:2011-11-12 22:06:05

标签: javascript object this alert

我很困惑为什么在运行此代码时会替换全局alert()函数...我在这里没有使用prototype

Moo = (function(){              
    this.alert = function(s){
        console.log("Replaced Alert! " + s);
    };                  
    return this;    
})();

alert("poit");

当我运行代码时,我没有得到警告弹出窗口,而是运行上面的代码,我看到文本出现在我的控制台中。有人可以解释一下吗?

3 个答案:

答案 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的语义并不总是您所期望的。