为什么在我更改
时不会解析代码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() {}
时不起作用?
答案 0 :(得分: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() };