В функции обратного вызова 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()};