переменная область действия и замыкание внутри экземпляра javascript шаблона модуля - PullRequest
3 голосов
/ 26 июля 2010

Я пишу плагин jQuery и пишу его не стандартным для jquery-сообщества способом, главным образом для обеспечения переносимости и расширяемости.

У меня возникли проблемы с доступом к переменным, которые были объявлены в функции при доступе из прототипа.

Возможно, у меня эта модель очень неправильная, но я надеюсь, что кто-то может указать правильный путь для достижения моей цели, а именно создать несколько экземпляров одного и того же класса.Я пытаюсь закрыть окно, я получаю ошибку «this.auga is undefined».Когда я создавал кнопку закрытия (внутри метода окна сборки), я прикреплял событие click .click(this.hide) - это еще один метод в прототипе функции.Также мое .resize событие не работает, потому что метод .centerAuga использует мое свойство this.win.Получение this.win is undefined ошибки.

Почему метод .show имеет определенный this.auga, а метод .hide остается неопределенным?Я понимаю, что я получаю доступ к методу .show из самого экземпляра, но почему другие методы также не имеют доступа к экземпляру?Я пишу этот плагин, чтобы лучше познакомиться с JavaScript.Так что, если у кого-то есть понимание, пожалуйста - я весь слух.

Вот ссылка на пример:
http://jsfiddle.net/G26aM/16/

1 Ответ

4 голосов
/ 26 июля 2010

При обратном вызове jQuery переменная "this" будет указывать на элемент, который создал событие, даже если функция обратного вызова находится в вашем объекте.

Чтобы обойти это в начале вашего объекта, выполните:

var self = this;

И затем всякий раз, когда вы хотите сослаться на свой объект, используйте «self» вместо «this».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...