2010-07-26 2 views
3

저는 jQuery 플러그인을 작성하고 있습니다. 이식성과 확장 성을 유지하기 위해 비 jquery-community-standard 방식으로 주로 작성하고 있습니다 ( ).변수 패턴과 자바 스크립트 인스턴스 내부의 클로저

프로토 타입에서 액세스 할 때 함수에서 선언 된 변수에 액세스하는 데 문제가 있습니다.

아마도이 모델은 매우 잘못되었지만 누군가 내 목표를 달성하는 올바른 방법을 지적하고 같은 클래스의 인스턴스를 여러 개 만들면 좋을 것입니다.

창을 닫으려고 할 때 "this.auga is undefined"오류가 발생합니다. 닫기 버튼을 만들 때 (빌드 윈도우 메서드 내에서) 함수 원형 내에서 또 다른 메소드 인 클릭 이벤트 .click(this.hide)을 첨부했습니다. 또한 메서드 .centerAuga이 내 this.win 속성을 사용하기 때문에 나의 .resize 이벤트가 작동하지 않습니다. this.win is undefined 오류가 발생했습니다.

.show 메서드가 this.auga으로 정의 된 이유는 무엇입니까? .hide 메서드는 아직 정의되지 않은 채로 남아 있습니까? 내가 인스턴스 .show 메서드를 액세스 오전 이해하지만 - 왜 다른 방법도 인스턴스에 대한 액세스 권한이 없습니까?

"이 작업을 수행하십시오"가 아닙니다. 자바 스크립트에 익숙해지기 위해이 플러그인을 작성 중입니다. 누군가 통찰력을 가지고 있다면 - 나는 모두 귀입니다. "this"이 변수는 콜백 함수가 개체에있는 경우에도 이벤트를 생성 한 요소를 가리 킵니다 다시 전화 JQuery와에
http://jsfiddle.net/G26aM/16/

답변

4

:

는 여기에 예제 링크입니다.

var self = this; 

을 그리고 당신이 당신의 객체를 사용하는 대신 "이"의 "자기"를 참조 할 때마다 : 개체의 시작에서이 문제를 얻으려면

는 않습니다.

+0

필자는 이것이 반드시 문제라고 생각하지 않습니다. 문제는 프로토 타입에 활성 인스턴스에 대한 액세스 권한이있는 것입니다. 내가 정상적인 설정에서 "this"를 할당하는 방법을 알고, 나는 문제가 선언 된 인스턴스와 함께 프로토 타입 메소드를 사용하여 온 것 같아요. 프로토 타입 내에서 "이"액세스는 무엇입니까? –

+0

프로토 타입에서 이것을 사용하는 데는 아무런 문제가 없습니다. jquery와 충돌하는이 참조 문제처럼 보입니다. 예를 들어 이렇게하면 : this.win.resize (this.centerAuga). 즉, 센터 Auga에서 "this"는 더 이상 객체를 가리 키지 않습니다. 그러나 당신은 여전히 ​​그것을 의미하기 위해 그것을 사용합니다. –

+0

나는 네가 옳다는 것을 싫어한다. 내가 무엇을하고 있는지 알았 기 때문이다. 그. http://jsfiddle.net/G26aM/18/ <- 작품 –