在es6 javascript类中的非静态成员函数中调用静态getter

时间:2017-01-04 14:30:24

标签: javascript node.js ecmascript-6 es6-class

如何从es 6类中的普通成员函数调用静态函数?

以下是一个例子:

class Animal {
    constructor(text) {
        this.speech = text;
    }

    static get name() {
        return "Animal";
    }

    speak() {
        console.log( this.name + ":"+ this.speech)
    }
}

class Tiger extends Animal {
    static get name() {
        return "Tiger"
    }
}

var animal = new Animal("hey there");
animal.speak();
var tiger = new Tiger("hello");
tiger.speak();

// output: 
// undefined:hey there
// undefined:hello

我可以更改说话功能以返回

speak() {
     console.log( Animal.name + ":"+ this.speech)
}

但是这总是从Animal Class输出名称,但我想要的是输出当前类的静态名称属性(例如子类中的“Tiger”)。我怎么能这样做?

1 个答案:

答案 0 :(得分:2)

将非静态get name()添加到返回Animal的{​​{1}}类:

this.constructor.name

get name() {
    return this.constructor.name;
}