2013-08-22 5 views
1

나는 인터넷 검색을 미친 듯이했으나 여전히 이해할 수 없다. 나는 다음과 같이 아동과 부모 객체를 설정 한 경우자바 체인 생성자 연결하기

:

var bobby = new Child("Robert", "Lego"); 
document.write(bobby.name + " " + bobby.toy); 

//Result: Robert Lego 
:

var Child = function(name, toy) 
{ 
    this.toy = toy; 
    Parent.call(this, name); 
} 

var Parent = function(name) 
{ 
    this.name = name; 
} 

//Child.prototype = new Parent(); 

나는 다음과 같은 결과를 얻을 할 수 있도록 위의 행의 주석을 해제 할 수 하지 필요성을

내 이해가 잘못되었습니다 (아마도 잘못된 것 같습니다)

Child.prototype = new Parent(); 

은 Child 생성자가 만든 프로토 타입을 Parent 생성자가 만든 프로토 타입으로 설정합니다. 따라서,이 라인, (나는 아이에게이 상황을 설정, 부모 생성자를 호출하고 이름을 통과 생각) 라인

Parent.call(this, name); 

없이 실제로 작동하지 않아야합니다.

내 이해에 어떤 ​​문제가 있습니까?

미리 도움을 청하십시오! :)

+0

왜 'Parent.call (this, name);'가 작동해야합니까? 당신이 정의한'Parent' 함수를 호출하고 있습니다. –

답변

0

자바 스크립트는 함수가 생성자인지 여부를 알지 못합니다. new 키워드를 사용하여 호출 할 때만 처리됩니다. new없이 호출하면 다르게 동작합니다.

Parent.call(this, name) 단순히 사용, 일반 기능으로 Parent를 호출 새롭게 구축 Childthis로 (당신이 아이를 건설 할 때 new 키워드를 사용하기 때문에).

이 경우 모든 함수 parent은받은 개체에 이름을 할당합니다. 이 경우 방금 구성한 Child입니다.

이 자녀 비교 :

var Child = function(name, toy) 
{ 
    var child = new Parent(name); 
    child.toy = toy; 
    return child; 
} 

여기에, 자식 함수는 생성자로 Parent을 사용하고 있습니다.