문제

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 언어(예:C++) 개인(보호) 속성을 상속할 수 있는 곳은 어디입니까?

David Schreiber 감사합니다

도움이 되었습니까?

해결책

사용 Douglas Crockfords 파워 생성자 패턴 (링크는 동영상임) 다음과 같이 보호된 변수를 얻을 수 있습니다.

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();.

다른 팁

당신의 표시 사적인 선행 밑줄과 같은 일종의 마크 업이있는 변수 _이 방법으로 당신은 그것이 개인 변수라는 것을 알고 있습니다 (기술적으로는 그렇지 않습니다)

this._privateProperty = "private";
alert( this._privateProperty )

이것은 불가능합니다.그리고 이는 실제로 개인 속성이 아닙니다. 정의된 범위에서만 사용할 수 있는 일반 변수일 뿐입니다.

그렇게 할 수는 없지만 클래스 프로토타입에서 속성을 삭제하여 상속되지 않도록 할 수는 있습니다.

SubClass.prototype.privateProperty  = undefined;

이렇게 하면 상속되지 않지만 기본 클래스의 모든 "개인" 속성에 대해 상속을 수행해야 합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top