-1

为什么我更改时不解析代码

var comments_switcher = (function(){
    var switcher = null;
    var show = 'Show comments';
    var hide = 'Hide comments';
    function init(){
        if ( switcher == null ) switcher = document.getElementById("comments_switch");
    }   
    function switched_on(){     
        return switcher.value == show;
    }
    return {
        trigger : function(do_init){
            if ( do_init ) init();
            switcher.value = switched_on() ? hide : show;
        }
    }
})();

进入

var comments_switcher = (function(){
    var switcher = null;
    var show = 'Show comments';
    var hide = 'Hide comments';
    function init(){
        if ( switcher == null ) switcher = document.getElementById("comments_switch");
    }   

    return {
            trigger : function(do_init){
               if ( do_init ) init();
               switcher.value = switched_on() ? hide : show;
            },
            switched_on : function(){       
               return switcher.value == show;
            }
    }
})();

为什么xmlhttp.onreadystatechange在给出函数对象而不是时不起作用function() {}

4

1 回答 1

1

您需要switched_on从返回的对象中引用该方法,因为它不再是变量。

您可以使用this.switched_on(),假设该trigger()方法被调用为comments_switcher.trigger()

return {
    trigger : function(do_init){
        if ( do_init ) init();
        switcher.value = this.switched_on() ? hide : show;
// -----------------------^
    },
    switched_on : function(){       
       return switcher.value == show;
    }
}

但同样,这依赖于this正确设置返回的对象。这将取决于您如何调用trigger.


如果你这样做了:

xmlhttp.onreadystatechange = comments_switcher.trigger;

...它会失败。您可以将其更改为:

xmlhttp.onreadystatechange = function() { comments_switcher.trigger() };
于 2013-05-09T16:53:10.957 回答