2009-11-28 3 views
5

JavaScript에서 private 멤버를 기본 클래스에서 하위 클래스로 상속하는 방법이 있습니까?JavaScript에서 개인 회원을 상속하는 방법은 무엇입니까?

나는 이런 식으로 뭔가를 달성하고자 :

function BaseClass() { 
    var privateProperty = "private"; 

    this.publicProperty = "public"; 
} 

SubClass.prototype = new BaseClass(); 
SubClass.prototype.constructor = SubClass; 

function SubClass() { 
    alert(this.publicProperty); // This works perfectly well 

    alert(this.privateProperty); // This doesn't work, because the property is not inherited 
} 

어떻게 다른 OOP-언어 I 개인 (보호) 속성을 상속 할 수 있습니다 (예를 들어, C++.)에서 같은 클래스와 같은 시뮬레이션을 달성 할 수 있습니까?

이 가능하지, 데이비드 슈라이버

+0

이 패턴은 개인 속성을 추가하지 않습니다. BaseClass 함수에 privateProperty라는 로컬 변수 만 추가합니다. – erikkallen

+1

http://stackoverflow.com/questions/1437712/how-to-override-private-variable-in-javascript/1438592#1438592 이러한 언어 배태에 대한 제 의견은; C++을 에뮬레이트하려고하는 대신 JS의 의미를 배우십시오 – Christoph

답변

11

개인 변수 비디오)는이 같은 보호 변수를 얻을 수 있습니다

function baseclass(secret) { 
    secret = secret || {}; 
    secret.privateProperty = "private"; 
    return { 
     publicProperty: "public" 
    }; 
} 

function subclass() { 
    var secret = {}, self = baseclass(secret); 
    alert(self.publicProperty); 
    alert(secret.privateProperty); 
    return self; 
} 

참고 : 전원 생성자 패턴으로, 당신은 new를 사용하지 않습니다. 대신 var new_object = subclass();이라고 말하면됩니다.

+0

대단히 감사합니다! 파워 생성자 패턴 비디오에 대한 링크는 나를 도왔습니다. 이것은 내가 찾고 있었던 바로 그 것이었다. 이제는 JS와 객체에 대해 배워야 할 더 많은 것이 있다는 것을 이해합니다 :-) –

+1

링크가 변경되었습니다. 새로운 하나가 있습니다 : http://www.yuiblog.com/blog/2006/11/27/video-crockford-advjs/ (원본 링크는 1 부에 대한 것입니다) –

+1

'secret.privateProperty'는 다음과 같아야합니다. 'secret.protectedProperty' 그리고 private은'var privateProperty'와 같은 것입니까? – sabgenton

0

을 주셔서 감사합니다. 그리고 그것은 실제로 사유 재산이 아닙니다. 단지 그것이 정의 된 범위에서만 사용 가능한 일반 변수 일뿐입니다.

할 수없는
0

하지만이 상속되지 않도록 당신은 클래스 프로토 타입에서 속성을 삭제할 수 :

SubClass.prototype.privateProperty = undefined; 

이 상속되지 않습니다 그런 식으로,하지만 당신은 그렇게 할 필요가 기본 클래스의 모든 "개인"속성에 대해

2

를 마크 밑줄과 같은 마크 업의 일종 _ 에있다 Douglas Crockfords power constructor pattern (링크를 사용하여 (기술적으로는 아니지만) 당신이 개인 변수를 알고이 방법

this._privateProperty = "private"; 
alert(this._privateProperty) 
관련 문제