2012-03-05 7 views
0

자바 스크립트에서는 새로운 기능을 사용하기 때문에 새로운 기능이 추가되었습니다.부모 속성이있는 하위 클래스를 인스턴스화하는 자바 스크립트

나는 특성

function myClass(){ 
this.foo=null; 
} 

그때 아이 클래스 내가 원하는 자식 클래스의 예를 인스턴스화 할 때 내가 foo는의 속성을 설정하려면 어떻게

myChild.prototype = new myClass(); 

function myChild(){ 
alert(this.foo); 
} 

를 만들기 위해 상속을 사용하여 클래스가있는 경우 'bar'에 경고합니다. myChild가 아닌 myClass의 메서드와 관련있는 설정할 속성 목록이 있으므로 단순히 '막대'를 myChild로 전달하고 싶지 않습니다.

var newChild = new myChild(); 
+0

첫 번째 스 니펫에는'()'이 누락되어 있으며'bar' 문자열이 필요하면이를 인용해야합니다. – pimvdb

+0

수정하여 오타 수정 – user1209203

+0

''bar ''를 전달할 곳이 확실하지 않습니다. 어떤 기능을 받아 들여 그것을 설정해야합니까? 자식 클래스가 설정해야하지만 자식 클래스에 전달하고 싶지는 않습니다. 자세히 설명해 주시겠습니까? – pimvdb

답변

0

당신은 실제로이 질문 또한 in my answer to previous question에 대한 답을 찾을 수 있으며 다른 언어에서 상속과 유사하다.

클래스를 확장하는 경우 자식 클래스의 생성자 함수는 부모 클래스에 대한 고유 한 인수 을 받아 들여야합니다. 그래서 당신이 가정 :

function Parent(a) { 
    this.foo = a; 
}; 

// and 

function Child(b, a) { 
    Parent.call(this, a); // executes the parent constructor for this instance 
    this.bar = b; 
    alert(this.foo); 
}; 

inherits(Parent, Child); 

이 (inherits의 구현이 this answer에서 찾을 수 있습니다).

Child 내부에있는 부모 클래스의 construtor를 호출하고 매개 변수를 전달해야합니다 (Java 또는 Python에서와 유사). myChild.prototype = new myClass();가 대부분으로 좋은 상속 패턴이 아닌,

function Parent(a, b, c, d) {...}; 

function Child(e, f) { 
    // c and d are parameters for `Child` 
    // arguments[0] == e 
    // arguments[1] == f 
    // all other arguments are passed to Parent, the following 
    // creates a sub array arguments[2..n] 
    Parent.apply(this, [].slice.call(arguments, 2); 
    /... 
} 

// later 

var child = new Child(e, f, a, b, c, d); 
일반적으로

: 당신은 많은 매개 변수가있는 경우

, 당신은 좀 더 쉽게 일을하려면 arguments 객체를 사용할 수있다 시간, 클래스는 몇 가지 인수를 기대하고있다. 각 인스턴스에 대해 상위 생성자를 실행하지 않고 모든 인스턴스에 대해 한 번만 실행합니다.

+0

감사합니다 펠릭스 대답 내 질문에 대답을 받아 들였지만, 나는 더 간단하게 몇 가지 매개 변수를 사용하여 개체를 인스턴스화하여 다음과 같이 추가 매개 변수가있는 메서드를 호출하여이 작업을 수행 할 수 있음을 깨달았습니다. 새로운 라인을 한 번에 모든 것을 시도하는 대신에. – user1209203

0

당신은과 같이 아이의 생성자에서 속성을 설정할 수 있습니다 :

myChild.prototype = new myClass(); 

function myChild(){ 
    this.foo = "bar"; 
} 

당신이 원하는 무엇인가요?

아니면 foo 각 인스턴스에 포함 된 내용에 대해 유연하게하려는 경우가 바로 자식 클래스의 인스턴스 후 설정할 수는 :

var child = new myChild(); 
child.foo = "bar"; 
0

은 시공 방법을 매개 변수화.

function myClass(foo){ 
    this.foo=foo; 
} 
myChild.prototype = new myClass('bar'); 

function myChild(){ 
    alert(this.foo); 
} 
var newChild = new myChild(); 

나 :

function myClass(){ 
     this.foo=null; 
    } 
    myChild.prototype = new myClass(); 
    myChild.prototype.foo = 'bar'; 
    function myChild(){ 
     alert(this.foo); 
    } 
    var newChild = new myChild(); 
+0

각 개체가 다른 값을 전달할 때 나는 그것을 수행 할 수 없습니다 – user1209203

+0

이것이 원하는 것입니까? 'myChild.prototype.foo ='bar ';' –

관련 문제