2017-12-16 2 views
1

아래 함수는 OO Javascript 자습서에서 YouTube의 Derek Banas가 사용하는 함수입니다.프로토 타입 상속에서 임시 상자를 사용하는 이유는 무엇입니까?

function extend(Child, Parent){ 
    var Temp = function(){}; 

    Temp.prototype = Parent.prototype; 

    Child.prototype = new Temp(); 

    Child.prototype.constructor = Child; 

} 

왜 우리는 임시 프로토 타입을 사용해야합니까? 왜 우리는 이것을 할 수 없습니까?

function extend(Child, Parent){ 


    Child.prototype = new Parent(); 

    Child.prototype.constructor = Child; 

} 
+0

'Object.create'를 사용하지 않는 튜토리얼이 아직 있습니까? – Bergi

+0

https://stackoverflow.com/questions/39911926/why-is-new-parent-often-used-to-initialize-prototypes-of-children-instead-of-o – Bergi

+0

@Bergi 내가 링크 된 기사를 읽었습니다. 왜 두 번째가 나쁜지 설명하지만 나는이 문장을 잘 이해하지 못한다. "상속 된 속성과 다른 속성을 다른 속성으로 사용하는 것이 바람직하지 않습니까?" - –

답변

1

음. 함수 모두에서 주된 차이는 라인

Temp.prototype = Parent.prototype; 

Child.prototype = new Parent();

extend 기능 프로토 타입 상속을 단독으로 표시된다. ChildParent의 속성을 상속받지 않습니다.이 속성은 프로토 타입에 없습니다. 알 수 있듯이 부모의 constructor은 어디에도 없습니다.

나는 이것을 설명하기 위해 바이올린을 만들었습니다. here. 두 번째 확장 기능에서

, 당신은 Child에 의해 상속됩니다되지 않는 모든 alongwith 부모의 프로토 타입이있는 Parent의 부모의 constructorChild.prototype = new Parent(), 모든 속성을 호출로; 즉 모든 것이 자녀의 prototype에 들어갑니다.

나는 이것도 설명하기 위해 바이얼 here을 만들었습니다.

+0

@Bergi의 기사에서 그가 왜 두 번째가 나쁜지 설명하는 링크를 읽었지만이 문장을 이해하지 못합니다. "상속 된 속성과 다른 속성을 다른 속성으로 사용하는 것이 바람직하지 않습니까?" –

+1

두 번째 옵션에서 내 피들 (fiddle)로, 당신은 아마도 프로토 타입 프로퍼티 (상속받은)와 Vehicle의 프로퍼티를 Car의 프로토 타입 프로퍼티로 가져 오는 것을 볼 수 있습니다. 여기에서는 두 가지를 구별 할 수 없습니다. 그 성명서의 우려입니다. –