Лучший подход, чтобы избежать ошибок "этого" в JavaScript - PullRequest
5 голосов
/ 23 декабря 2010

В некоторых случаях ключевое слово this может не относиться к объекту, на который я рассчитываю.(недавний пример: в ключевом событии, в моем XBL)

Какой лучший способ избежать такой ошибки?

Пока я использую всегда$.fn из jQuery для хранения моих переменных, но я не уверен, что это лучший подход.

Ответы [ 2 ]

10 голосов
/ 23 декабря 2010

Узнайте, как и почему this ведет себя так, как работает, затем прочитайте код, над которым вы работаете.

Не доверяйте некоторым магическим функциям, вы всегда можете получить неожиданные результаты, если выне знаю / не читал код.

Просто нет единственного замечательного решения для этой "проблемы".

3 голосов
/ 23 декабря 2010

Не избегайте использования this . Просто используйте это правильно. Javascript - это объектно-ориентированный язык на основе прототипов. Если вы создаете свои объекты с использованием прототипа объекта , следует всегда знать, к чему это относится.

jQuery.fn - то же самое, что и jQuery.prototype. jQuery.fn это просто псевдоним. Вы также можете проверить это ключевое слово, используя instanceof.

this instanceof jQuery

Другой распространенной практикой является вызов метода и привязка контекста в это время с использованием функциональных методов apply или call. Это будет гарантировать этот контекст функции.

Вот простой пример.

var div = document.getElementById('div1');
function sayId(){
    alert(this.id);
}
sayId.call(div); // alerts div1

Первый аргумент метода вызова связывает контекст this и запускает функцию.

Умение контролировать и проверять this - лучший способ избежать распространенных ошибок.

...