는이 코드 (JSFiddle)이 "공개"방법의 범위를 올바르게 지정하려면 어떻게해야합니까?
var OBJ = function(){
var privateVar = 23;
var self = this;
return {
thePrivateVar : function() {
return privateVar;
},
thePrivateVarTimeout : function() {
setTimeout(function() { alert(self.thePrivateVar()); } , 10);
}
}
}();
alert(OBJ.thePrivateVar());
OBJ.thePrivateVarTimeout();
이 나는 데 진짜 문제의 추상화가있다.
OBJ.thePrivateVarTimeout()
에 대한 호출은 10
을 기다린 다음 alert
과 23 (다른 노출 된 메서드를 통해 액세스하려고 함)을 기다리게 될 것으로 예상됩니다.
그러나 self
이 올바르게 설정되지 않은 것 같습니다. self = this
을 설정할 때 this
은 함수에 대한 참조가 아니며 전역 개체에 대한 참조 인 것으로 나타납니다. 왜 이런거야?
어떻게 공용 메서드를 만들 수 있습니까? thePrivateVarTimeout
은 다른 공용 메서드 thePrivateVar
을 호출합니까?
이 * 왜 당신은 일반적으로 기능이? * 호출이기 때문에
.bindAll
방법을 함수에
var that = this
같은 로컬 값을 사용하거나 사용 포함 것 ('func()'). 이 경우,'this'는 항상 전역 객체를 참조합니다. 빈 객체를 참조하기를 원하면'new'로 호출하거나 하나를 지정하십시오 :'var self = {};'. –@FelixKling 그러면 '자기'가 올바르게 설정됩니다. 나는 여전히 thePrivateVar를 호출하는데 사용할 수 없다. 나는 레이놀즈의 대답이 내가해야하는 방법이라고 생각한다. –