2010-12-29 5 views
0

함수 객체의 동작을 보았습니다. 프로토 타입과 비슷하지만 다른 방법을 사용합니다. 서브 클래스의 새로운 인스턴스 this.inherit 방법 이루어진다자바 스크립트 함수 객체의 상속 메소드 동작

var Car = function() { 
    this.foo = 'shiny'; 
} 

var Rover = function() { 
    this.inherit = Car; 
    this.inherit(); 
} 

var Mini = function() { 
    this.inherit = Car; 
    this.inherit(); 
} 

부모의 속성들 및 방법은 서브 클래스에 사용할 수 있도록, 자신의 상위 클래스를 호출하는 효과를 갖는다.

var myRover = new Rover(); 

var myMini = new Mini(); 
myMini.foo = 'rusty'; 

console.log(myRover.foo, myMini.foo); // displays "shiny" & "rusty" respectively 

모질라와 MSDN을 살펴 보았지만 어디에서 문서를 찾을 수없는 것 같습니다. 누구든지이 행동과 그 이상의 문서화에 이름을 붙일 수 있습니까?

답변

1

단어 inheritFrom은 여기에 맞지 않는다고 생각합니다. 그것은 또한 bar 일 수 있습니다. 이 작업을 만드는 것은 다음 라인에서 호출하는 "subClass"함수의 멤버를 정의하는 패턴입니다.

몇 가지 추가 아이디어는 Douglas Crockford의 "Classical Inheritance in JavaScript"기사를 확인하는 것이 좋습니다.

0

inheritFrom은 JavaScript 핵심 개체에 존재하는 메서드가 아닙니다. JavaScript 상속은 여러 가지 방법으로 수행 할 수 있습니다 as outlined in this post. 함수와 동일한 별도의 객체에 단일 메소드를 설정하는 것처럼 여기에서하는 작업은 실제로 적절한 상속이 아닙니다.

먼저 superClass이라는 함수를 선언하십시오. 이 함수는 this 개체의 foobar 속성을 설정합니다. 당신이 superClass 동일 subClass에 방법을 설정하는 경우는 메소드의 호출 그래서 다음 서브 클래스가 'foo''bar'-foobar 세트의 특성을 가지고 있기 때문에 this 오브젝트는 subClass 기능을 참조합니다. 여기에 푸 방법을 덮어 쓸 때

는 :

this.foo = function() { 
    return this.foo; 
}; 

을 당신은 함수에 foo를 켜십시오. 이 스크립트를 추가하는 것이

주의 사항 : subClass 생성자에서 값을 오버라이드으로

var test = new subClass(); 
alert(test.foo); 

test.foo 함수 될 것입니다. 추가 :

alert(test.bar); 

덮어 쓰지 않았으므로 문자열 'bar'을 경고합니다. 또한 test.foo()으로 전화하면 test.foo 메서드에 대한 포인터 만 반환됩니다.

+0

메쏘드 이름을 편집하여 더 이해하기 쉽도록했습니다. subClass 메서드는 상속 된 속성을 반환합니다. "apply"메소드를 사용하여 세 번째 유형의 상속을 사용하기 때문에이 게시물은 재미있어 보입니다. – gawpertron

+0

@ gawpertron : 기본적으로 내가 말하고자하는 것은 당신이 실제로 상속을 받고 있지 않다는 것입니다. 당신은'myClunction' (또는 무엇이든)이라는 'subClass' 객체에 메소드가있을 것이라고 간단히 말하고 있습니다. 이'myFunction'는'superClass' 함수 안에서 스크립트를 실행합니다. 'superClass' 함수의'this' 키워드는 호출자를 참조합니다.이 경우 호출자는'subClass' 메소드가 될 것입니다. – treeface

+0

기능을 제거했습니다.이제 "inheritFrom", "inherit"또는 "monkeys"라는 메서드를 "new"키워드를 사용하는 것과 동일한 효과를 가지지 만 하위 클래스에 속성과 메서드를 추가하는 메서드를 호출하면 아무런 차이가 없다는 것을 알 수 있습니다. – gawpertron