// Define class A
dojo.declare("mynamespace.A",null,{
myMethodA: function() { this.myMethodB() }
});
// Define class B
dojo.declare("mynamespace.B",mynamespace.A,{
myMethodB: function() {}
});
는 법적 범위에 this.myMethodB()를 호출하는 것입니다 ... 클래스 A와 클래스 B가 클래스 A에서 상속 클래스 B, 주어 클래스 A (부모 클래스)? 나는 이것을 소프트웨어에서 보았고 이해가되지 않는다. Java에서 A에서 B로 타입 변환하지 않으면 불가능합니다. 그러나 dojo가 다른 것입니까?
답변
이 질문에 귀하의 화두 this.inherited (인수)이 될 것입니다; 귀하의 질문은 현재 상속 범위에없는 메소드를 호출하기위한 것이며 실제 객체 지향 프로그래머는 무효라고합니다. 그러나 로더가 전역 범위의 모든 것을 선언 했으므로 (여전히) 가능합니다. mynamespace.X를 통해 모든 모듈에 액세스 한 다음 prototype.theMethod를 추가 할 수 있습니다.
mynamespace.B에서와 같이 상속이 있으면 A와 B의 모든 기능이 'this'로 범위가 지정됩니다. 단순하게 병합 된 해시와 같습니다 (예 : for all methods and variables in A do set instance B[key] = property A[key]
).
그러나 속성이 'class'A와 B 모두에 대해 프로토 타입 화 된 경우 재정의가 발생하면 declare/construct 체인에 'super'(또는 부모 클래스, 사용자의 표기법) 호출을 허용하는 메커니즘이 있습니다).
특수 속성 생성자의 경우 상속이 [기간]을 버립니다. 한 번만 선언 된 모든 메소드에 대한
, 그것은 상속 방법이 아닌 경우, 당신은 자신의 관련을 호출 할 수 없습니다 - 그리고 그 다음 재정의를 가지고있는 방법에 대한 '이'를 통해 액세스 할 수 있습니다, 함수 'this.inherited (arguments);' 현재 부모 클래스의 피 호출자에게 위쪽으로 하나의 진드기를 보냅니다. 확장 된 바이올린을 보자. here
var AClass = dojo.declare("mynamespace.A", null, {
constructor: function(args) {
this.overriddenMethod();
},
overriddenMethod: function() {
}
});
var BClass = dojo.declare("mynamespace.B", [AClass], {
constructor: function() { },
overriddenMethod: function() {
// call super before anything else is processed in this method
// by placing following call you can control function callflow
this.inherited(arguments);
}
});
// will call A.constructor, then A.overriddenMethod
new AClass();
// will call B.constructor, A.constructor, B.overriddenMethod and then
// A.overriddenMethod via the call to super
// in B.overriddenMethod which A.constructor
// calls (note that A.constructor callflow 'aims' B.override not A.override)
new BClass();
btw 정적 사용자 공간에 관해서는이 양식을 사용하는 경향이있다 :'var AClass = declare (.,., {constructor : ...}); AClass.ENUMA = 0; ...' – mschr
프로토 타입 개체를 사용하여 모든 메서드를 호출 할 수 있습니다. 여기
myMethodA: function() { mynamespace.B.prototype.myMethodB(); }
은 작업 예입니다 @akonsu 아직 언급 한 것처럼
이 기술적으로 가능하며, 따라서, 자바 스크립트의 정적 컴파일이 없다, 그러나에 패턴이 아니다 따르
var a = new mynamespace.A();
a.myMethodA(); // ilegal: Uncaught TypeError: Object [object Object] has no method 'methodB'
var b = new mynamespace.B();
b.myMethodA() // legal
또한 즉, 주어진 객체의 방법으로, 자바 스크립트에 지정된 범위에서 방법/기능을 실행할 수 있습니다 :
a.myMethodA.call(b); // legal as `this` inside `myMethodA` will be referencing to object `b`
는 실질적으로, 나는 당신이 자바에서 알고있는 mynamespace.A
추상적 인 방법 myMethodB
와 추상 클래스를 에뮬레이트 할 수있다 생각합니다. 클래스 mynamespace.A
서브 클래 싱 된 경우 서브 클래스는 myMethodB
을 구현해야합니다. 그러나이 방법을 수행하는 것은 매우 오류가 발생하기 쉬운 내가 더 강력한 방법으로 그것을 할 것입니다 :
// Define class A
dojo.declare("mynamespaca.A", null, {
myMethodA: function() {
this.myMethodB();
},
myMethodB: function() {
// abstract method
console.warn("Abstract method [myMethodB] was not implemented.");
// or: throw new Error("Abstract method [myMethodB] was not implemented.");
}
});
// Define class B
dojo.declare("mynamespace.B", mynamespace.A, {
myMethodB: function() {
// implement abstract method here
}
});
- 1. 자식 컨트롤의 viewstate에 액세스
- 2. XML로 자식 액세스?
- 3. 요소의 자식 액세스
- 4. 자식 movieClip에 액세스 FlashDevelop
- 5. 자식 클래스에서 UITableView에 액세스
- 6. 액세스 자식 요소 (jQuery를)
- 7. 자식 대화 상자에서 변수에 액세스
- 8. 자식 GUI 속성 표준 액세스
- 9. 자식 UI 파일에 액세스하는 방법
- 10. 자식 자식 병합의 커밋 메시지를 편집하는 방법
- 11. 자식 : 자식 저장소의 스냅 샷을 얻는 방법
- 12. 액세스 한정자로 인해 자식 컨트롤에 액세스 할 수 없습니다.
- 13. vfork 자식 액세스 부모 변수 수 있습니까?
- 14. LINQ : 런타임 중에 자식 목록에 액세스
- 15. Newtonsoft.Json.Linq.JValue에서 자식 값에 액세스 할 수 없습니다.
- 16. 다른 자식의 자식 클래스 메서드에 액세스
- 17. 자식 컨트롤에서 부모 컨트롤에 액세스 - ASP.NET C#
- 18. 프로그래밍 방식 액세스 연결된 마스터/자식 필드
- 19. 자식 저장소에 액세스 할 수없는 읽기 전용
- 20. jquery에서 DOM의 그랜드 자식 요소에 액세스 하시겠습니까?
- 21. 동적 변수를 사용하여 tr에서 자식 td에 액세스
- 22. 자식 스레드에서 인스턴스화 된 사전 항목 액세스
- 23. 자식 NSView/ViewController를 통해 NSWindow의 요소에 액세스
- 24. iframe에서 부모와 자식 간의 크로스 도메인 액세스
- 25. 자식 네임 스페이스에서 내부 메서드에 액세스
- 26. 뷰에서 자식 수정하는 방법
- 27. 자식 -> 자식 클래스 PHP
- 28. 자식 위젯 처리 QKeyEvent하는 방법?
- 29. 자식 값의 차이를 표시하는 방법
- 30. 자식 창에서 링크를 숨기는 방법
기술적으로 물론 가능하다. 언어가 이것을 금지하지는 않습니다. – akonsu
전역 패턴을 숨기는 AMD 패턴이있는 계획이 있습니다. 즉 전역 (오염 가능) 범위가 아닌 로컬 변수로 의존성과 참조를 가져와야합니다. dojo.has ("config-publishRequireResults")를 통해 필수 모듈에 액세스 할 수 있는지 확인하십시오. 그것은 여전히, 현재 기본 동작 – mschr