0

その場でスクリプト タグを作成して 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();
4

2 に答える 2

2

これ

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

objコンテキスト ( ) をshow関数に渡しません。次のようなクロージャーを作成する必要があります

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

または、ターゲット ブラウザがサポートしている場合はbindを使用します。

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

ほとんどの JS フレームワークには、bindまたは同様の機能も含まれています。

于 2011-11-23T11:10:58.367 に答える
1

問題は、this動的にスコープされることです。私はこれがうまくいくと思います:

oScript.onload = function () {obj.show()};
于 2011-11-23T11:11:28.210 に答える