在javascript回调函数中没有获取现有对象属性的值

时间:2011-11-23 11:07:55

标签: javascript callback onload onreadystatechange

我正在通过动态创建脚本标签来加载js,我已经在脚本加载上编写了一个回调函数,但是当js加载后调用函数时,我检查它时无法访问我的对象属性萤火虫的价值不见了。下面是我的代码,请回答我的代码中的问题,或者有不同的方法来做同样的事情。

obj = {
     cont: null,    
     create:function(){
       this.cont = document.createElement('iframe');
       this.cont.style.setProperty('background-color', '#FFFFFF', 'important');
       this.getJs();
     },

getJs:function(){
    var oHead = document.getElementsByTagName('head')[0];
    var oScript = document.createElement('script');
    oScript.type = 'text/javascript';
    oScript.src = 'myjs.js';

    oScript.onload = obj.show;//most browsers

    oScript.onreadystatechange = function() {// IE 6 & 7
        if (this.readyState == 'complete') {
            obj.show();
        }
    }
    oHead.appendChild(oScript);        
},

show:function(){
    alert(this.cont);//this.cont is not available when js load and show function get called as a
}   }obj.create();

2 个答案:

答案 0 :(得分:2)

   oScript.onload = obj.show;//most browsers

不会将上下文(obj)传递给show函数。你需要建立一个像

这样的闭包
   oScript.onload = function() { obj.show() }
如果您的目标浏览器支持,请使用{{3>}:

   oScript.onload = obj.show.bind(obj)

大多数JS框架还包括bind或类似的功能。

答案 1 :(得分:1)

问题是this是动态范围的。我认为这应该有效:

oScript.onload = function () {obj.show()};