2013-03-03 75 views
0

我正在寫一個JS函數,但我有一個問題,變異標記JavaScript範圍不分配變量

的代碼:

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; 
      } 

      .... 

的variabile的想象,初始化呼籲圖象的加載功能的LoadImage

在這個函數是代碼:

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

具有圖像的加載後做標記的分配。

當我嘗試進入標記,圖像的加載後,它總是導致未定義;並且我確信已經創建了RichMarker

我不明白爲什麼會發生這種情況。

+0

JavaScript的變量將存儲對象的引用,但你不能共享引用說'數字或字符串或未定義。如果marker只是一個數組或對象,那麼'marker'和'this.marker'在稍後修改它時不會是同一個對象(它是未定義的,所以你所做的不會工作)。 – Chad 2013-03-03 00:25:46

回答

0

JavaScript變量將存儲對象的引用,但不能共享引用來說NumberStringundefined。如果只是一個數組或對象,然後和this.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; 
    } 

    //... 
}