javascript closures onreadystatechange -
why code not parsed when change
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; } } })();
into
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; } } })();
and why xmlhttp.onreadystatechange
not work when giving function object instead of function() {}
?
you need reference switched_on
method returned object since it's no longer variable.
you can use this.switched_on()
, assuming trigger()
method invoked 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; } }
but again, relies on this
being set returned object. depend on how you've invoked trigger
.
if did:
xmlhttp.onreadystatechange = comments_switcher.trigger;
...it fail. change to:
xmlhttp.onreadystatechange = function() { comments_switcher.trigger() };
Comments
Post a Comment