类语法相当于向原型添加共享值?

时间:2018-02-03 23:01:25

标签: javascript

说我有这个班级

class banana {
    constructor(weight) {
        this.weight = weight;
    }
}

banana.prototype.type = "fruit";

所以不同的香蕉有不同的重量,但所有香蕉都是水果,因此我想在原型而不是实例中添加“type = fruit”。

我不喜欢在类声明结束后不得不这样做,为了便于阅读,我最好将方法和原型变量保持在一起。

在类括号内是否有语法?排序类似

class banana {
    type = "fruit" <- doesn't work of course

    constructor(weight) {
        this.weight = weight;
    }
}

3 个答案:

答案 0 :(得分:2)

在类语句中,只允许使用方法,不允许任何赋值。 因此,如果要设置类型,则必须在构造函数中进行设置,如下所示:

class banana {

    constructor(weight) {
        this.weight = weight;
        this.type = "fruit";
    }
}

如果你不想这样做,那么你也可以将你的常数定义为一个函数,但这对我来说有点不好意思:

class banana {

    constructor(weight) {
        this.weight = weight;
    }

    static type() {return "fruit";}
}   

答案 1 :(得分:0)

你可以在构造函数中设置它:

class Banana {
  constructor() {
    this.type = 'fruit';
  }
}

或者你可以有一个Fruit类,其中Banana是一个子类:

class Fruit {
  constructor() {
    this.type = 'fruit';
  }
}

class Banana extends Fruit {
  constructor() {
    super();
  }
}

或者,如果您正在使用Babel,则可以添加transform-class-properties plugin

class Banana {
  type = 'fruit';
}

// .babelrc
{
  "plugins": [[
    "transform-class-properties"
  ]]
}

答案 2 :(得分:0)

您可以定义一个小辅助函数:

const Type = prototype => Object.assign(function(){}, {prototype});

然后扩展它:

class Test extends Type({some:"prop"}) {
  constructor(){
   super();
   //...
  }
  //...
}