저자: Yin Weiming
블로그: http://my.donews.com/yinwm/
이전 기사에서 말했듯이 JavaScript의 경우 클래스는 함수이고 클래스입니다. 메서드(즉, 정적)는 모두 이 함수의 일부이며 인스턴스 메서드는 모두 프로토타입에 있습니다.
function ClassA() {
}
ClassA.staticMethod = function() {
}
ClassA.prototype.instanceMethod = function() {
}
내 구현에서 클래스 상속은 상위 클래스의 모든 클래스 메서드를 복사하여 하위 클래스가 상위 클래스의 정적 메서드를 갖도록 하는 것입니다.
그런 다음 하위 클래스의 프로토타입.prototype이 상위 클래스의 프로토타입을 가리키도록 합니다.
그런 다음 필요에 따라 일부 메서드를 다시 작성할 수 있습니다.
function ClassB() {
}
ClassB.staticMethod = ClassA.staticMethod;
ClassB.prototype.prototype = ClassA.prototype;
ClassB.prototype.instanceMethod = function() {
// 메소드 2
}
하위 클래스의 경우 프로토타입 체인을 사용하여 메소드 인스턴스 메소드의 상속을 구현합니다. 이 구현 방법을 선택한 이유는 하위 클래스가 일부 메서드를 재정의해야 하기 때문입니다. 그리고 프로토타입은 참조이므로 ClassB.prototype = ClassA.prototype을 직접 작성하면 ClassB의 인스턴스 메소드를 다시 작성하면서 ClassA의 인스턴스 메소드가 파괴됩니다. 수정된 메서드는 상위 클래스를 차단합니다.
메소드를 찾는 순서는 instanceA.prototype.method -> ClassA.prototype입니다.
이제 클래스 메소드의 상속이 구현되어야 합니다. 상위 클래스의 메소드를 호출합니다.
Java에서는 이러한 사용이 매우 일반적입니다.
public void method() {
super.method()
}
JavsScript에서 이러한 기능을 구현하려면 다음을 유지해야 합니다. ParentClass.prototype을 가리키는 상위 참조
ClassB.prototype.parent = ClassA.prototype.
그런 다음 인스턴스B에서 this.parent.method.call(this)을 호출하여 상위 클래스의 메서드를 사용합니다. 호출을 사용하여 데이터를 상위 클래스로 전송하십시오. 아직 생각하지 못한 더 좋은 해결책이 있습니다.
그래서 완성된 코드는
function ClassA() {
}
ClassA.prototype.method1 = function() {
}
ClassA입니다. .staticMethod = 함수() {
}
function ClassB(){
}
ClassB.staticMethod = ClassA.staticMethod;
ClassB.prototype. 프로토타입 = ClassB.prototype.parent = ClassA.prototype;
확장 메소드를 추상화했습니다.
var LCore = function () {
}
LCore .extend = function (destination, source) {
// 모든 기능 복사
for (var prop in source) {
if (prop == “prototype”) {
continue; 🎜>
destination.prototype[prop] = source[prop];
}
// 상위 및 참조 프로토타입에 대한 참조를 만듭니다.
destination.prototype.prototype = 대상. parent = source.prototype;
반환 대상
}