이 함수 내에서 ID에 액세스하려면 어떻게해야합니까?클래스 멤버에 액세스 할 수 없습니다.
0
A
답변
2
"개인"변수가 Javascript에 있다고 생각하는 것 같습니다. 개인 변수는 클로저를 통해 Javascript에서만 에뮬레이트되지만 다른 언어와 마찬가지로 존재하지 않습니다. 코드에서 id
은 생성자 내에서만 액세스 할 수 있습니다.
당신은 id
개인 불구하고 여전히 기능 내에서 액세스 할 수 있습니다 유지할 수 있습니다,하지만 당신은 폐쇄가에 액세스하도록 귀하의 생성자에서 그 함수를 선언해야합니다 :
function Example()
{
//private
var id;
this.getId = function()
{
return id;
}
this.init = function()
{
$.post('generateId.php', {}, function(data)
{
id = data;
});
};
};
을 또 다른 문제는 비동기 콜백 내에서 this
에 액세스하려고하는 것입니다. 이 컨텍스트 ($.post
에 전달 된 콜백)에서 this
은 호출 함수의 컨텍스트가 무엇이든 상관 없으며 아마도 정의되지 않았거나 XmlHTTPRequest 개체입니다. 당신이 그것을 액세스하려면
, 당신은 (id
가정하는 것은 개인 아닌, 원래 코드에서) 당신이 함수의 this
를 캐시해야합니다 :
Example.prototype.init = function()
{
var self = this;
$.post('generateId.php', {}, function(data)
{
self.id = data;
});
};
0
은 어쩌면 당신은 조금을 다시 작성할 수 있습니다 :
를var Example = Example || {};
Example.id = "";
Example.init = function(){
$.post('generateId.php', {}, function(data)
{
Example.id = data; // <-------- error
});
}
관련 문제
- 1. 클래스 멤버에 액세스 할 수 없습니다.
- 2. 싱글 톤 클래스 소멸자에서 private 멤버에 액세스 할 수 없습니다.
- 3. 코드에서 UserProperty의 멤버에 액세스 할 수 없습니다.
- 4. 정적 메서드에서 클래스 멤버에 액세스
- 5. 클래스 멤버에 대한 액세스 제어
- 6. 클래스가 공용 멤버에 액세스 할 수 없습니다. C++
- 7. 클래스 인스턴스가없는 클래스 수준 멤버에 액세스
- 8. 왜이 클래스 멤버에 파이썬으로 액세스 할 수 없습니까?
- 9. 모호한 클래스 멤버에 대한 액세스
- 10. IronPython에서 C# 클래스 멤버에 액세스
- 11. 템플릿 친구 함수가 전용 멤버에 액세스 할 수 없습니다.
- 12. 멤버에 대한 포인터에 액세스 할 수 없습니다. 왜?
- 13. 보기에서 내 뷰 모델의 내부 멤버에 액세스 할 수 없습니다.
- 14. DefaultInstanceManager가 수식어가있는 클래스의 멤버에 액세스 할 수 없습니다. ""
- 15. 파생 포인터에서 공용 기본 멤버에 액세스 할 수 없습니다.
- 16. 파생 된 클래스에서 보호 된 멤버에 액세스 할 수 없습니다.
- 17. ReflectionException "비공개 멤버에 액세스 할 수 없습니다."하지만 속성에 액세스 할 수 있습니까?
- 18. C++의 기본 클래스 개인 멤버에 액세스
- 19. ipdb 내의 클래스 멤버에 대한 액세스
- 20. 구조체의 멤버에 액세스 할 #define?
- 21. 간단한 파이썬 질문 : 클래스 데이터 멤버에 액세스
- 22. 오류 : "클래스 'boost :: signals2 :: scoped_connection'에 선언 된 비공개 멤버에 액세스 할 수 없습니다?
- 23. 클래스 'QReadWriteLock'Error에 선언 된 전용 멤버에 액세스 할 수 없습니다. 오류 오류 C2248 :'QReadWriteLock :: QReadWriteLock '
- 24. Eclipse : Scala는 Java 클래스 멤버에 액세스 할 수 없습니다. 정리 후 바로
- 25. Java에서 하위 클래스의 수퍼 클래스 보호 된 멤버에 액세스 할 수 없습니다.
- 26. 파생 클래스에서 기본 클래스 멤버에 액세스
- 27. UIViewController에서 self.var없이 객체 클래스 멤버에 액세스
- 28. C++ 클래스 범위를 통해 인스턴스의 멤버에 액세스
- 29. silverlight에서 웹 서비스의 클래스 멤버에 액세스
- 30. 인라인 어셈블리의 C++ 클래스 멤버에 액세스
'getId'는'id'가 명시 적으로 설정되어 있지 않으면 undefined를 반환합니다. 그래서 네, 당신이 생성자에서 private로 선언 한 것과 같은 id를 참조하지 않습니다. – tjameson
코드 예제에서 'id'는 생성자를 제외한 모든 곳에서 액세스 할 수 없습니다. 이 문제를 해결하려면 생성자에서 클로저를 작성하면됩니다 (첫 번째 예제). 그러나 생성자 외부에서'id'에 액세스 할 수있는 방법은 없습니다. – tjameson
시간을 내 주셔서 감사합니다. 많은 도움을 받았습니다. –