簡體   English   中英

使派生類方法對外部私有,但可在es6中的基類上訪問

[英]Making derived class method private to outside but reachable at baseclass in es6

這是我的簡化示例。

class BasePerson{
    constructor(name){
        this.name = name || "noname";   
    }

    shout(){
        var shoutMessage = this._talk() + "!!!!!";
        console.log(shoutMessage);
    }
}

class HappyPerson extends BasePerson{

    constructor(name){
        super(name);
        this.message = "LA LA LA LA LA";
    }   

    _talk(){
        return this.message;
    }
}

var person1 = new HappyPerson();
person1.shout(); //LA LA LA LA LA!!!!!
person1._talk(); //returns LA LA LA LA LA but I want _talk to be undefined

我要實現的是,在獲取HappyPerson的實例時將_talk方法設為私有,但僅在BasePerson類上可以實現。 如何在es6中實現這一目標?

似乎您嘗試實現一種抽象方法(因為您希望父方法在子方法上調用它的實現,即使您希望將方法從子類中隱藏,這很奇怪)。 如果這正是您想要的,則可以將_talk函數作為回調傳遞給喊父母的函數。 並非完全相同的解決方案,但它很干凈,並且可以將所有內容保密,如下所示:

class BasePerson{
    constructor(name){
        this.name = name || "noname";   
    }

    shout(talkFn){
        var shoutMessage = talkFn() + "!!!!!";
        console.log(shoutMessage);
    }
}

class HappyPerson extends BasePerson{

    constructor(name){
        super(name);
        this.message = "LA LA LA LA LA";
    }   

    shout(){
        super.shout(()=>this.message);
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM