2010-07-01 6 views
3

는 내가 같이 자바 스크립트로 간단한 프로토 타입 상속을 할 수 있다는 것을 알고자바 스크립트로 깊은 상속?

var Parent = function() { 
}; 

var Child = function() { 
} 

Child.prototype = new Parent(); 
Child.prototype.constructor = Child; 

그러나, 내가 하나가 더 깊은 유산을 달성 할 방법을 궁금 하군요? 다중 상속은 어떨까요?

답변

6

JavaScript에서 다중 상속을 수행 할 수 없습니다. 당신은 단순히 더 이동하여 깊은 상속을 수행 할 수 있습니다

var Parent = function() {}; 
var Child = function() {}; 
var InnerChild = function() {}; 

그리고 그것이 작동 보여 :

Parent.prototype.x = 100; 
Child.prototype = new Parent(); 
Child.prototype.y = 200; 
InnerChild.prototype = new Child(); 
InnerChild.prototype.z = 300; 

var ic = new InnerChild(); 
console.log(ic.x); //prints 100, from Parent 
console.log(ic.y); //prints 200, from Child 
console.log(ic.z); //prints 300, from InnerChild, who only wants to express itself 
+0

좋은 대답. 다중 상속을 할 수는 없지만, 예를 들어 jQuery 나 underscore.js와 같은 라이브러리에서 제공하는 "확장"함수를 사용하여 "혼합"방식을 사용하는 것은 어렵지 않습니다. –

+0

자바 스크립트에서 상속을 할 수있는 경우 다중 상속이 아닌 것을 알 수 없습니다. var extend = function (classObject, superClass) { for (varClass in superClass.prototype) { if (classObject.prototype [i]]) 다음과 같이 확장 함수를 사용할 수 있습니다.) classObject.prototype [ "_ super_"+ i] = superClass.prototype [i]; else classObject.prototype [i] = superClass.prototype [i]; } }; – rob

+0

extend는 다중 상속의 일종이라고 생각합니다. 그것은 실제로 다중 상속이 아니지만 "한 객체의 모든 속성을 다른 객체에 추가"합니다. 예 : instanceof가 제대로 작동하지 않습니다. 어쨌든 자바 스크립트에 OOP 기술을 적용하는 것은 바보 일뿐입니다. 실제로 프로토 타입 상속이기 때문입니다. 어떤 코드를 작성하고 "이것은 다중 상속이다"라고 말하면서 문제를 혼란스럽게 만듭니다. – Claudiu