2013-01-06 2 views
0

함수 프로토 타입을 다른 함수에 추가하는 방법은 무엇입니까? 예 :자바 스크립트 : 함수 프로토 타입을 다른 함수에 추가하는 방법은 무엇입니까?

// Foo 
function foo(){}; 
foo.prototype.a = 'hello'; 

// Bar 
function bar(){} 
bar.prototype.b = 'world'; 

// Append Foo's prototype to Bar 
bar.appendPrototype(foo); 

// Print 
console.log(bar.prototype) // -> { a: 'hello', b: 'world' } 
+0

난 당신 말은 생각'bar.appendPrototype (foo는)' – PitaJ

+0

@PitaJ 그래, 감사합니다! – Adam

답변

1

원본 프로토 타입의 소품을 반복하여 대상 프로토 타입에 추가 할 수 있습니다. 이것은 src 프로토 타입의 속성이 일반적으로 복사 될 수있는 간단한 속성 (함수 나 간단한 값과 같은 객체 자체)이 아니라고 가정합니다. 중첩 된 객체 인 프로토 타입 속성을 허용하려면 각 속성을 복제해야합니다. 보통 그 그래서 여기에 필요한 간단한 버전입니다되지 않습니다

bar.appendPrototype = function(src) { 
    for (var prop in src.prototype) { 
     this.prototype[prop] = src.prototype[prop]; 
    } 
} 

bar.appendPrototype(foo); 

프로토 타입 그냥 그래서 당신은 또 다른 하나의 프로토 타입의 속성을 복사 할 수 있습니다 개체입니다.

+0

몇 가지 ... 먼저 'bar.appendPrototype'은 함수가'bar.prototype.appendPrototype'이므로 대신 정의되지 않습니다. 둘째,이 접근법은 대상 객체 (bar.prototype')에서 객체를 수정하면 소스 객체 ('foo.prototype')에서 객체를 수정하기 때문에 객체를 프로토 타입의 속성으로 사용하면 잠재적으로 위험 할 수 있습니다. 예를 들어'foo.prototype.a = [1, 2, 3]'이라고 가정하고'bar.appendPrototype (foo)'를 실행 한 다음'bar.prototype.a.push (4)'를 실행했다고 가정하십시오. 그러면'foo.prototype.a'는 이제'[1, 2, 3, 4]'입니다. – Reid

+0

@ Reid - 대답 수정. – jfriend00

0

쉽게 할 수 있습니다.

function foo(){}; 
foo.prototype.a =2; 

function bar(){ 
    foo.call(this,null); 
} 
bar.prototype.b=4; 
console.log(bar.prototype); //{a:2,b:4} 
관련 문제