В функции обратного вызова javascript не получается значение свойства существующего объекта - PullRequest
0 голосов
/ 23 ноября 2011

Я загружаю 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();

Ответы [ 2 ]

2 голосов
/ 23 ноября 2011

Это

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

не передает контекст (obj) в функцию show. Вы должны сделать закрытие, как

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

или используйте bind , если ваш целевой браузер поддерживает это:

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

Большинство JS-структур также включают bind или аналогичную функцию.

1 голос
/ 23 ноября 2011

Проблема в том, что this динамически ограничен. Я думаю, что это должно работать:

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