프로토 타입 기반 상속을 통해 생성 된 클래스 계층 구조와 같은 것을 가지고있는 webapp에서 작업하고 있습니다. 공통 조상 "클래스"에 지속적으로 기능을 추가하여 생성자 서명이 지속적으로 확장되도록합니다.재귀 적으로 Javascript에서 "상위"생성자를 호출 하시겠습니까?
우리는 조상의 서명을 변경할 때마다 변경 사항을 생성자의 생성자에 전파해야합니다. 이것은 유지 관리 문제이므로 분명히 arguments
개체에서 부모에 대한 인수를 추출하고 Function.apply()
을 사용하여 부모를 호출하는 함수를 만들었습니다.
코드는 다음과 같습니다
BaseClass.prototype._super = function(args) {
args = Array.prototype.slice.call(args, this.constructor.length);
this.parentConstructor.apply(this, args);
};
과 같이 사용 :
function Child(child_arg1, child_arg2 /*, implicit parent args */) {
this._super(arguments);
}
(코드가 엄격 모드이기 때문에 내가 arguments.caller.arguments
을 사용할 수 없습니다 this.parentConstructor
함수에 의해 설정된다. 클래스 계층 구조 만들기.
불행히도 이것은 한 수준의 상속에서만 작동합니다. 예를 들어, A의 부모 클래스 B는 자신의 부모 클래스 C를 가지고 있습니다. B가 _super
을 호출하면 this.parentConstructor
은 B를 계속 가리 킵니다. 이는 B가 무한 루프에서 자신을 호출하게된다는 것을 의미합니다.
parentConstructor 필드를 생성자 함수 객체 (프로토 타입 대신)와 함께 저장하면 현재 호출 함수를 전달해야합니다. 이것은 슈퍼 함수를 주변 함수와 밀접하게 연결하는 선을 만들려고합니다.
아무도 더 좋은 방법을 알고 있습니까?
"주변 기능과 매우 밀접하게 결합 된"이란 무엇을 의미합니까? 'Child' 생성자로부터'this._super (Child, arguments)'를 호출하는 것은 문제가되지 않을 것입니다, 그렇죠? – Bergi
변경하지 않고도 모든 하위 생성자에 동일한 코드 행을 복사하여 붙여 넣을 수 있기를 바랍니다. 자바에서 할 수있는 것처럼 ... –