2016-01-02 2 views
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

Смежные вопросы