2013-12-13 1 views
0

먼저, 제가 전에 물어 본 것처럼 느끼기 때문에 정말로 이것을 찾으려고했습니다. 아마도 잘못된 용어를 사용하고 있지만 아직 아무것도 찾지 못했습니다. 어쨌든 질문은 :자바 스크립트에서 상속 된 함수를 보완 하시려면

function Parent(){ 
    this.say = function(words){ 
     console.log(words); 
    }; 
} 

그리고이 상속 자식 클래스 :

것은 내가 부모 클래스가 있다고 가정

내가 자식 클래스는 제외 say 기능을 갖고 싶어
function Child(){ 
    Parent.call(this); 
} 

인수를 미리 정의하고 싶습니다. 예를 들어,이 작업을 수행하는 비 이상적인 방법은 추가 기능을 재 작성하는 것입니다 :

this.say = function(){ 
    console.log("hello") 
} 

을하지만 차라리 어떻게 든 부모의 말 함수를 호출 인수 "hello"

어떻게 것을 지정합니다 이러는거야? 또는 - 자바 스크립트 상속에 대해 생각하는 것이 잘못된 방법인가요? 그렇다면 무엇을 권하고 싶습니까?

답변

2

올바른 작업은 프로토 타입의 모든 인스턴스가 공유하는 메소드와 인스턴스 생성자의 인스턴스 특정 코드를 공유하는 것입니다.

function Parent(){ } 

Parent.prototype.say = function(words) { 
    console.log(words); 
}; 


function Child() { 
    Parent.call(this); // apply parent constructor to instance 
} 

Child.prototype = Object.create(Parent.prototype); // establish inheritance 
Child.prototype.constructor = Child; 

Child.prototype.say = function() { // override method 
    // call parent method with specific argument 
    Parent.prototype.say.call(this, 'hello'); 
}; 

.call (및 .apply)를 사용하면 this가 함수 내에서 참조해야하는지 설정 명시 적으로 함수를 호출하자 : 당신이하려는 경우

당신은 아이의 프로토 타입에 어떤 방법을 재정의 할 수 있습니다. 이 경우 부모 생성자에 대해 .say 메서드를 호출하지만 this을 전달하기 때문에 메서드가 Child 인스턴스에서 호출 된 것과 같습니다.

관련 문제