0

JS で関数を書いていますが、変数マーカーに問題があります。

コード:

    function piano(numero, link) {

            var marker;
            this.marker = marker;

            var immagine = loadImage(link, marker);
            this.immagine = immagine


            function createMarker() {

                    return new RichMarker({

                           ....

                    });
            }

            function loadImage(link, marker) {

                    var immagine = new Image();

                    immagine.src = link;

                    immagine.onload = function() {
                            marker = createMarker();  
                    };  

                    return immagine;
             }

             ....

変数 immagineは、画像をロードする関数loadImageを呼び出して初期化されます。

この関数では、コードは次のとおりです。

                    immagine.onload = function() {
                            marker = createMarker();  
                    };  

画像の読み込み後にマーカーの割り当てを行う必要があります。

画像の読み込み後にmarkerにアクセスしようとすると、常にundefinedになります。RichMarkerが作成されたことは確かです。

なぜこれが起こっているのか理解できません。

4

1 に答える 1

0

NumberJavaScript 変数はオブジェクトへの参照を保存しますが、参照を共有してまたはStringと言うことができませんundefinedmarkerが配列またはオブジェクト以外の場合、後で変更すると、markerthis.markerは同じオブジェクトにはなりません (参照を代入するのではなく、値をコピーすると考えてください)。

代わりに、オブジェクトのスコープを試して、後でそのオブジェクトを再度this参照できるようにします。

function piano(numero, link) {
    var self = this;
    this.immagine = loadImage(link);


    function createMarker() {
        return new RichMarker({
            //...
        });
    }

    function loadImage(link) {
        var immagine = new Image();
        immagine.src = link;

        immagine.onload = function() {
            //use the scoped version of 'this'
            self.marker = createMarker();  
        };  

        return immagine;
     }

     //...
 }
于 2013-03-03T00:29:22.067 に答える