javascript
2016-01-02 50 views 0 likes 
0

這裏是什麼即時試圖做一個簡單的版本:javascript onload如何在實例中工作?

<script type="text/javascript"> 
    function Example(position) { 
     this.position = position; 
     instance = this; 

     img = new Image(); 
     img.src = 'http://www.gazette-ariegeoise.fr/IMG/jpg/test.jpg'; 

     console.log(this.position); 
     //logs as expected 1 than 2 on the second 


     img.onload = function() { 
      console.log(instance.position); 
      //logs 2 twice 
     } 
    } 

    ex1 = new Example(1); 
    ex2 = new Example(2); 
</script> 

莫名其妙的onload功能記錄實例2次的位置,

爲什麼呢?

回答

4

instance是全球性的,所以第二個電話Example()覆蓋了第一個。

使用var創建局部變量。

更好的是,也use "use strict";所以它不會讓你創建偶然的全局變量。

+0

我認爲他應該使用'this.instance'而不是實例。 – PDKnight

+0

@PDKnight - 在事件處理程序中?這是行不通的。 'this'將是圖像,而不是'Example'實例。 – Quentin

+0

如果他將onload函數綁定到當前實例(新示例),則會生效。 – PDKnight

相關問題