2011-08-30 5 views
7

나는 자바 스크립트와 고민하고있다 고전 상속1. 최종 더글러스 크록 포드에, 자바 스크립트에서 클래식 모델을 지원하는 최초의 시도한다을 거부하는 동안, 나는 흥미 이해 찾습니다자바 스크립트 기생 상속

I have been writing JavaScript for 8 years now, and I have never once found need to use an uber function. The super idea is fairly important in the classical pattern, but it appears to be unnecessary in the prototypal and functional patterns. I now see my early attempts to support the classical model in JavaScript as a mistake.

그러나 기생 상속에 관한 어떤 정말 명확하지 뭔가가 :

function ZParenizor2(value) { 
    var that = new Parenizor(value); 
    that.toString = function() { 
     if (this.getValue()) { 
     return this.uber('toString'); 
     } 
     return "-0-" 
    }; 
    return that; 
} 

ZParenizor는 Parenizor의 관점에서 정의됩니다. 그러나 Parenizor는 기본 클래스이며 아무에게도 상속받지 않습니다. 따라서 this.uber 함수는 정의되지 않으며 새로운 ZParenizor2 객체의 toString 메서드를 호출하면 실제로 오류가 발생합니다.

맞나요? 아니면 무시하고 있습니까?

업데이트 내가 옳았 어. 이 메서드는 uber 메서드를 호출 할 필요가 없으므로 매개 변수로 0을 사용하여 ZParenizor를 만들 때만 작동합니다 (메서드 imeplementation에서 볼 수 있듯이).

Uncaught TypeError: Object #<error> has no method 'uber' 
+1

모든 개체는 적어도 Object.prototype에서 상속받습니다 ... –

+1

글쎄, 오류는 무엇이라고 말합니까? –

+0

예. 그 오류는 내가 생각한 것이 아니라 오타였다. 그러나 모든 객체가 객체 인 함수를 상속한다는 사실에 대해서는 생각하지 못했습니다. 감사! – user278064

답변

2

당신은 동네 짱 기능을 가지고 Parenizor의 프로토 타입을 수정할 수 있으며 다른 값으로 작동합니다 : 다른 매개 변수를하려고하면

, 나는이 오류가 발생합니다.

+0

맞아요.하지만 저자가 객체를 상속받은 이들에게만 우버 함수를 제공하기로 결정했다는 사실은 ma 나는 생각하지 않아. – user278064

+0

그래, 그 맥락에서 그것은 완전히 쓸모없는 것처럼 보일뿐입니다. 그러나 그것은 '상속받은'대상에 어떤 용도가 주어 졌는가에 달려 있습니다 – Chiguireitor