2010-07-26 4 views
3

Я пишу плагин jQuery, и я пишу его стандартным способом без jquery-community, главным образом , чтобы поддерживать переносимость и расширяемость.переменная область видимости и закрытие внутри шаблона модуля javascript instance

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

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

Проблема возникает, когда я пытаюсь закрыть окно, я получаю сообщение об ошибке «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/

ответ

4

В JQuery перезвонить «это» переменная будет указывать на элемент, который создал событие, даже если функция обратного вызова в вашем объекте.

Чтобы обойти эту проблему в начале вашего объекта сделать:

var self = this; 

И тогда, когда вы хотите, чтобы обратиться к использованию объекта «само» вместо «это».

+0

Я не думаю, что это обязательно проблема. Я думаю, что проблема заключается в том, что прототип доступа к активному экземпляру. Я знаю, как назначить «это» в обычном режиме, я думаю, проблема связана с использованием прототипов методов с объявленным экземпляром. Что такое «этот» доступ в прототипе? –

+0

Нет ничего плохого в использовании этого прототипа. Это похоже на эту проблему, противоречащую jQuery. Например, вы делаете это: this.win.resize (this.centerAuga). Это означает, что в центре Auga «это» больше не будет указывать на ваш объект. Но вы все еще используете это там, чтобы это понимать. –

+0

Я ненавижу, что ты прав, потому что я думал, что знаю, что я делаю. что. http://jsfiddle.net/G26aM/18/ <- работает –

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