2013-08-16 3 views
1

Javascript에서 수퍼 클래스 생성자에 값을 전달하는 방법. 다음 코드에서 Javascript의 Prototypal Inheritence

(function wrapper() { 
var id = 0; 

window.TestClass = TestClass; 

function TestClass() { 
    id++; 
    this.name = 'name_' + id; 
    function privateFunc() { 
     console.log(name); 
    } 
    function publicFunc() { 
     privateFunc(); 
    } 

    this.publicFunc = publicFunc; 
} 

function TestString() { 
    this.getName = function() { 
     console.log("***" + this.name + "****************"); 
    } 
} 

TestClass.prototype = new TestString(); 
})(); 

가 어떻게이 TestString에 생성자에 값을 전달 할 니펫을? 현재 수퍼 클래스 메소드는 'this'키워드를 사용하여 값을 사용하고 있습니다. 수퍼 클래스 생성자에 직접 값을 전달하는 방법이 있습니까? 또한 String을 확장하는 간단한 예제를보고 싶습니다. 그것은 많은 것을 신비화 할 것입니다.

+1

, 상속을 확립은': 당신이 "개인 변수를 사용하는 것처럼 http://stackoverflow.com/q/17392857/218196 –

+0

같습니다 "그러면 프로토 타입 상속이 작동하지 않습니다 (객체 속성에서 작동하는 다른 작업도 수행하지 않습니다) – Esailija

+0

@ Esailija .. 정교하게 설명하십시오. 여기에 도움이되는 작은 예제. 감사. – Gopal

답변

2

TestClass() 생성자에서 다음 코드를 사용할 수 있습니다.

TestString.apply(this, arguments); 

이렇게하면 새 개체를 컨텍스트로 사용하여 생성자를 호출합니다.

그러나 TestClass.prototype = new TestString();으로 [[Prototype]] 체인을 설정하면 이미 해당 생성자를 한 번 호출하게됩니다.

jsFiddle.

간단한 예제로 String을 보길 원합니다.

prototype 속성을 추가 할 수 있습니다.

나는`TestClass.prototype = 새로운 TestString에()를 사용하지 않는 것이 좋습니다
String.prototype.endsWidth = function(str) { 
    return this.slice(-str.length) === str; 
}; 
+0

@ alex..thanks를 사용하여 생성자 본문에서 함수를 정의하지 않은 이유를 설명합니다. 이 바이올린을 확인해 주시겠습니까 http://jsfiddle.net/gCwZD/1/ 프로토 타입 부품을 주석 처리했습니다. 여전히 작동합니다 !! 어떻게 가능합니까? – Gopal

+0

@Gopal : 당신이'TestString.prototype'에 아무 것도 추가하지 않았기 때문에, 당신이 그것을 설정했는지 여부는 중요하지 않습니다. 'prototype' 속성이 실제로 무엇인지에 대한 더 나은 아이디어를 얻으려면 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Introduction_to_Object-Oriented_JavaScript를 읽어 보는 것이 좋습니다. –

+0

@ FelixKling .. 나는 당신의 대답을 여기에서 보았다. http://stackoverflow.com/questions/17392857/benefits-of-using-object-create-for-inheritance 큰 설명에 감사드립니다. 그러나, 나는 여기에서 한 가지를 얻지 못하고있다. 수퍼 클래스 생성자를 호출해야하는 이유는 무엇입니까? 예를 들어,이 피들 http://jsfiddle.net/AvVG2/1/을 확인하시기 바랍니다 수 있습니까? – Gopal