var obj = {
toString:function(){ return 'in the range of obj(in the range)';}, //console.log(의 실행을 용이하게 하기 위해 toString 함수를 다시 작성합니다. this) Output
func: function(){
// 여기서 함수는 "object" 객체에 직접적으로 종속됩니다.
console.log(this)
var innerFunc = function(){
// n여기의 함수는 특정 객체의 직접적인 멤버가 아니며, 단지 다른 함수의 변수입니다.
};
innerFunc(); }
}; 🎜>obj.func();
// "obj 범위 내(범위 내)" 출력
// "Window의 일부 관련 내용..." 출력
Missing 이렇게 하면 이와 같은 매개변수 호출이 절약됩니다. 하지만 이 매개변수를 수동으로 변경할 수도 있지만 구문이 약간 다릅니다. 마지막 줄의 "obj.func();"를 다음과 같이 변경합니다.
// "Window의 일부 관련 내용..." 출력 // "Window의 일부 관련 내용..." 출력
위의 예에서 볼 수 있듯이 call은 실제로는 또 다른 기능(메서드)입니다. call은 obj.func에 대한 시스템 내장 메소드에 속합니다(JavaScript의 특성에 따라 함수는 객체라는 것을 알고 있습니다.).
이 방법으로 가리키는 범위를 변경하면 예제를 계속 사용하여 innerFunc에서 this 매개변수를 수정할 수 있습니다. "잘못된" 가리키는:
toString:function(){ return 'in the range of obj (within 범위)';}, //console.log(this) func: function(){
)
innerFunc.call(this); 🎜> }
};
obj.func();
// 출력 "obj 범위 내(범위 내)"
// 출력 "obj 범위 내(범위 내) scope)"
Ext의 Scope 구성
Scope를 지정하는 함수는 없고 "this"는 브라우저의 창 개체(예: 이벤트 핸들러 등)를 가리키는 것을 알 수 있습니다. .), 이것의 포인터를 변경하지 않는 한, 범위는 포인터 바인딩에 사용할 수 있는 구성 항목입니다. 내장 호출/적용 메소드인 Ext는 도우미 메소드 createDelegate도 제공합니다. 이 함수의 기본 기능은 이 포인터를 바인딩하지만 createDelegate 메소드에 매개변수를 전달하여 즉시 실행하지 않는 것입니다. 이 매개변수의 범위에서 실행됩니다. 예:
코드 복사
코드는 다음과 같습니다.
var obj = {
toString:function(){ return 'in the range of obj(in the range)';}, //console.log(의 실행을 용이하게 하기 위해 toString 함수를 다시 작성합니다. this) Output
func: function(){
// 여기서 함수는 "object" 객체에 직접적으로 종속됩니다.
console.log(this)
var innerFunc = function(){
// n여기서 함수는 특정 객체의 직접적인 멤버가 아니며, 단지 다른 함수의 변수일 뿐입니다.
};
innerFunc = innerFunc.createDelegate(this ); // 여기서는 위임된 함수가 원래 함수를 재정의합니다.
~ . 🎜>// "obj 범위 내에서" 출력
이것은 작은 예이고 원리는 매우 기본이므로 잘 소화하시기 바랍니다. 그럼에도 불구하고 실제 작업에서는 여전히 혼란스럽기 쉽지만 기본적으로 위의 이론적 지식에 따라 내용을 분석할 수 있다면 모든 것이 바뀔 것입니다.
또 다른 것이 있습니다. 다음 예를 살펴보세요.
코드 복사
코드는 다음과 같습니다.
varsDs.load({callback: function(records){ col_length = varsDs.getCount();//여기의 varD가 범위를 벗어났습니까? //col_length = this.getCount ();/ /이것은 store와 동일합니까? for (var x = 0; x {
colarray[x] = varsDs.getAt(x).get(' hex');
}
}}); 하지만 더 명확하게 작성할 수 있습니다.
var obj = {
callback: function(records){
col_length = varsDs.getCount( );//여기서 varD가 범위를 벗어났습니까?
//col_length = this.getCount();//store와 같은가요?
// ...
}
};
varsDs.load(obj); 이제 함수 콜백이 obj에 직접 걸려 있으므로 this 포인터는 다음과 같습니다. obj.
하지만 참고: 이것은 쓸모가 없습니다. 왜? obj.callback이 최종적으로 실행될 때 무슨 일이 일어날지 모르기 때문입니다. Ext.data.Store의 로드 메소드(모방 구현)를 상상해 보십시오.
코드 복사
o.callback ();
}
...
이 가짜 구현에서 콜백 함수의 범위는 개인 변수 "o"입니다. 일반적으로 함수가 어떻게 호출되는지 모르기 때문에 범위를 선언하지 않으면 콜백 함수에서 이 매개변수를 사용하지 못할 수도 있습니다.