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

Я загружаю 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 ответа

Решение

Это

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

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

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

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

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

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

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

oScript.onload = function () {obj.show()};
Другие вопросы по тегам