2009-07-26 3 views
1

FieldEdit이라는 객체가 있다고합시다. 이 객체에 대한 함수 생성자를 정의하고이를 통해 인스턴스화합니다. var obj = new FieldEdit(), 그 방법을 FieldEdit.prototype.<method name> = function() { ... }으로 정의하십시오.Javascript 질문 : 객체 호출 문제가 있습니다.

개체의 다른 메서드 (this.<method name>(); 통해) 내에서이 개체의 메서드를 호출하면 어떤 상황에서 실패합니까?

나는이 코드 샘플을 게시하는 것을 피하고 싶습니다. 왜냐하면이 문제는 실제로 자바 스크립트에 대한 이해가 무엇보다 중요하다고 생각하기 때문에 가능합니다. 나는 내 지식이 최상이기 때문에 내 코드가 확실하다는 것을 확신한다. (그리고 여기에 내 지식이있다.)

답변

2

thisFieldEdit 방법의 실행 중에 FieldEdit 아닌 다른 오브젝트를 참조 할 가장 가능성있는 시나리오 .call(someOtherScope) 또는 .apply(someOtherScope, args) 명시 적 호출 클로저, 이벤트 핸들러, 또는 임의의 기능 또는 방법과 같은 중첩 범위 내에있다.

FieldEdit 인스턴스에 대한 변수 참조를 유지하고 대신 FieldEditInstance.<method>()을 사용하면이 문제를 해결할 수 있습니다.

var FieldEditInstance = this; 
obj.methodThatUsesACallback(function() { 
    // use that instead of this 
}); 

또는

var FieldEditInstance = this; 
var callback = function() { 
    // ... 
}; 
// This is more or less what PrototypeJS' Function.bind produces 
var boundCallback = function() { 
    return callback.apply(FieldEditInstance, arguments); 
}; 
obj.methodThatUsesACallback(boundCallback); 
+0

아 : 함께 중,

PrototypeJS는이 목적을 위해 Function.bind와 기능을 래핑 할 수 있지만 쉽게 그렇지 않으면 수행합니다. 사실 내가 만든 사용자 정의 이벤트 핸들러의 콜백 함수에서 발생합니다. 얼마나 아팠는가. –