2014-11-26 2 views
0

두 개의 기본 함수에 상속 관계가 없으면 두 함수에서 상속 받고 프로토 타입에 대한 변경 사항을 존중하는 함수를 어떻게 만듭니 니?프로토 타입 상속에서 "다중 상속"

이 예제는 cA.prototypeB.prototype으로 수정되기 때문에 원하는 동작을 보여줍니다. B는 A.이 불가능

function A() { } 
function B() { } 
function C() { } 
C.prototype = //something that extends A and B even though B does not extend A. 

A.prototype.foo = "foo"; 
B.prototype.bar = "bar"; 

var c = new C(); 
console.log(c.foo); //should print foo 
console.log(c.bar); //should print bar 
+1

처럼 사용 그런 다음이

C.prototype.perform = function (key) { var args = Array.prototype.slice(arguments, 1); if (key in this) return this[key].apply(this, args); if (key in B.prototype) return B.prototype[key].apply(this, args); if (key in A.prototype) return A.prototype[key].apply(this, args); undefined(); // throw meaningful error } C.prototype.get = function (key) { if (key in this) return this[key]; if (key in B.prototype) return B.prototype[key]; if (key in A.prototype) return A.prototype[key]; } 

같은 것을 할 코드를 변경할 수 있지만, 당신은 C의로의 모든 속성을 복사 할 수 루프가있는 프로토 타입. –

+0

실망 스럽습니다. (믹스 인을 계속 사용하겠습니다.) –

+0

http://stackoverflow.com/questions/9163341/multiple-inheritance-prototypyp-in-javascript를 참조하십시오. –

답변

2

에서 상속 곳

function A() { } 
function B() { } 
B.prototype = Object.create(A.prototype); 
function C() { } 
C.prototype = Object.create(B.prototype); 

A.prototype.foo = "foo"; 
B.prototype.bar = "bar"; 

var c = new C(); 
console.log(c.foo); //prints foo 
console.log(c.bar); //prints bar 

그러나, 나는 사치가 필요하지 않습니다.

믹스 인 패턴을 사용하거나 B의 속성을 C에서 상속 받아 다른 속성을 A에서 상속받습니다. 그런 다음이 속성을 통해 액세스하십시오.

1

당신은 실망스럽게도이 작업을 수행 할 수 없습니다

var c = new C(); 
c.perform('toString'); 
c.get('foo'); 
+0

흥미로운 접근 방법입니다. 그러나 나의 유스 케이스가이 합병증을 보증한다고 생각해. –