【问题标题】:How do I make the child object not inherit a method or property from the parent object?如何使子对象不从父对象继承方法或属性?
【发布时间】:2022-10-24 08:02:21
【问题描述】:

我正在使用类创建一个子对象,但我不希望它从父对象继承某些属性和方法。

我想知道是否有任何方法可以做到这一点。

我的代码:

 class Player {
  #name;
  #marking;
  #score;
  constructor(){
   this.#name = undefined;
   this.#marking = undefined;
   this.#score = {wins:0,defeats:0};
  }
  action(){...}
  
  getName(){...}
  setName(){...}
  ...
 }

 class AIPlayer extends Player{
  constructor(){
   super();
   this.#name = "AI-0.1.2";
   
  }
  action(){...}

  //I don't want AIPlayer to inherit setName() or #score 
  
 }
  
 const p1 = new Player();
 p1.setName("Mr.Banana);
 console.log(p1.getName()); //-> Mr.Banana

 const AIP0 = new AIPlayer();
 AIP0.setName("stupid computer"); //->error
 console.log(AIP0.getName()); //-> AI-0.1.2

【问题讨论】:

    标签: javascript class object methods properties


    【解决方案1】:

    将 setname 更改为私有方法。 #setname(){}

    【讨论】:

    • 我不能setName(){} 必须是一个公共方法,如果我改变它我不能在原始对象上调用它。
    【解决方案2】:

    只是重载方法:

    setName(name) {
      throw "name can not be set"
    }
    

    【讨论】:

    • 我不知道在这种情况下这样做是不是最好,我只是希望他不要继承这个方法。
    【解决方案3】:

    我发现在不使用开销的情况下“删除”该方法的方式如下:

     class Child extends Parent{
      constructor(){
       super();
       this.methodYouWantToDelete = null;
       ...
      }
     }
    

    我不知道这是否是最好的方法,但它确实有效。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多