Вызов статического геттера в нестатической функции-члене в классе javascript es6

Как я могу вызвать статическую функцию из обычной функции-члена в классе 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)
}

Но это всегда будет выводить имя из класса животных, но я хочу вывести свойство статического имени текущего класса (например, «Тигр» в подклассе). Как я могу это сделать?


person Lut Ze    schedule 04.01.2017    source источник
comment
Вы можете использовать this.constructor.name, по крайней мере, в вашем случае это будет работать (статические члены являются свойствами функции-конструктора и Object.prototype.constructor). Однако я не уверен, является ли это лучшим/самым чистым решением.   -  person ASDFGerte    schedule 04.01.2017
comment
Почему он статичен?   -  person Christopher Schneider    schedule 04.01.2017


Ответы (1)


Добавьте нестатический get name() в класс Animal, который возвращает this.constructor.name:

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

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

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

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

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

person Ori Drori    schedule 04.01.2017