2015-01-13 4 views
0

Я использую JQuery и написал следующий код:Calling класс в цикле

function Test() { 
    this.value = ''; 
    this.someFunction = function() { 
     // do something 
    } 
    this.loopFunction = function() { 
     var array = ['one', 'two', 'three']; 
     array.foreach(function() { 
      // calling someFunction not possible because 'this' is defined as value of loop 
      this.someFunction(); 
     }); 
    } 
} 

Моя проблема заключается в том, что я не могу вызвать функцию SomeFunction в цикле, поскольку ключевое слово «это» в настоящее время определяется как значение цикла. Есть ли способ сделать это, не потеряв эту «классную»?

+0

Это стандартная проблема с закрытием. Используйте локальный var для сохранения предыдущего 'this'. –

+0

Простой, но эффективный. Спасибо – diealtebremse

+0

Другая проблема с 'bind' - вы теряете локальный' this' (элемент массива), к которому вы также можете получить доступ в одно и то же время (хотя это передается функции как параметр). –

ответ

0

Это стандартная проблема с закрытием. Используйте локальный var для сохранения предыдущего this.

this.loopFunction = function() { 
    vat self = this; 
    var array = ['one', 'two', 'three']; 
    array.foreach(function() { 
     // calling someFunction not possible because 'this' is defined as value of loop 
     self.someFunction(); 
    }); 
} 

в некоторых версиях JQuery вы можете использовать bind, но я считаю, это намного проще читать.

1

Вы можете использовать родной метод bind. Например:

array.foreach(function() { 
    // calling someFunction not possible because 'this' is defined as value of loop 
    this.someFunction(); 
}.bind(this)); 
Смежные вопросы