Оповещение Javascript () заменяется - PullRequest
2 голосов
/ 13 ноября 2011

Я не понимаю, почему глобальная функция alert() заменяется, когда я запускаю этот код ... Я не использую prototype здесь.

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

alert("poit");

Когда я запускаюкод Я не получаю всплывающее окно с предупреждением, вместо этого запускается приведенный выше код, и я вижу, что текст появляется в моей консоли.Может кто-нибудь объяснить?

Ответы [ 3 ]

8 голосов
/ 13 ноября 2011

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;
})();
3 голосов
/ 13 ноября 2011

Как сказано выше, проблема в том, что в вашем случае это относится к окну (поскольку вы не в конструкторе).

Разве вы не хотели сделать это вместо этого?:

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

с ключевым словом new

0 голосов
/ 13 ноября 2011

this оценивается как глобальный контекст (window).

Семантика this в JavaScript не всегда соответствует ожиданиям.

...