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

在javascript回调函数中,未获取现有对象属性的值,javascript,callback,onload,onreadystatechange,Javascript,Callback,Onload,Onreadystatechange,我通过动态创建脚本标签来加载js,我在脚本加载上编写了一个回调函数,但是当js加载后调用函数时,我无法访问我的对象属性,当我在firebug中检查它时,该值丢失了。下面是我的代码,请回答我的代码中有什么问题,或者是否有其他方法来执行相同的操作 obj = { cont: null, create:function(){ this.cont = document.createElement('iframe'); this.cont.style

我通过动态创建脚本标签来加载js,我在脚本加载上编写了一个回调函数,但是当js加载后调用函数时,我无法访问我的对象属性,当我在firebug中检查它时,该值丢失了。下面是我的代码,请回答我的代码中有什么问题,或者是否有其他方法来执行相同的操作

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();
这个

不将上下文(
obj
)传递给
show
函数。你需要像这样结束

   oScript.onload = function() { obj.show() }
或在目标浏览器支持的情况下使用:

   oScript.onload = obj.show.bind(obj)
大多数JS框架还包括
bind
或类似的函数

不将上下文(
obj
)传递给
show
函数。你需要像这样结束

   oScript.onload = function() { obj.show() }
或在目标浏览器支持的情况下使用:

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

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

问题在于
这个
是动态范围的。我认为这应该奏效:

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

问题在于,
的范围是动态的。我认为这应该奏效:

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

您可以设置事件函数的范围。请参见此问题,您可以设置事件函数的范围。看到这个问题谢谢你的回答,它正在使用“oScript.onload=function(){obj.show()}”,但是当我使用这个.show()而不是obj.show()时它就不起作用了为什么会这样?基本上,当你使用一个函数作为事件侦听器时,
这个
在调用函数时会动态绑定到
窗口
。因此,在包含
this.show()
的函数中,这实际上是
窗口,而不是
obj
。感谢您的回答,它使用的是“oScript.onload=function(){obj.show()}”,但当我使用this.show()而不是obj.show()时,它不起作用。为什么会这样?基本上,当您使用函数作为事件侦听器时,
调用函数时,此
动态绑定到
窗口
。因此,在包含
this.show()
的函数中,这实际上是
窗口
,而不是
obj