JavaScript ES6 - Статический метод в родительском классе возвращает значение, установленное в дочернем классе - PullRequest
0 голосов
/ 16 мая 2018

У меня есть структура этого класса:

class Component{
    constructor(name){
        this.__name = name;
    }

    static getName() { return this.__name; }
}   

class ComponentChild extends Component{
    constructor(){
        super("myName");
    }
}

Когда я звоню

console.log(ComponentChild.getName);

Я бы ожидал myName

Вместо этого я получаю undefined.

Любая помощь? Спасибо !!

Ответы [ 2 ]

0 голосов
/ 16 мая 2018

В ООП статические свойства и функции принадлежат классу, в который они объявлены, следовательно, они не имеют доступа к свойствам или функциям экземпляра, поэтому вам нужно будет сделать эту функцию нестатической.

getName() { return this.__name; }

Дальнейшее объяснение

Вы должны принять во внимание, что JS не является языком ООП на основе классов, а основан на прототипе, прежде чем ES6 объявил "статическую" функцию как свойство функции конструктора:

function Component(name) {
     // ctor logic
}

Component.getName = function(){ 
     // fn logic 
}

То есть внутри «статической» функции ваша эта является функцией конструктора.

Обновление

Если вы должны использовать статический метод, вы можете написать такую ​​функцию доступа, как

class Component {
    static getName(instance) {
        return instance._name;
    }
}

А затем использовать его как

console.log(Component.getName(instance));
0 голосов
/ 16 мая 2018

Вы не можете использовать this в статической функции для ссылки на экземпляр. Статические функции являются статическими, потому что вы вызываете их в самом классе, а не в экземпляре; таким образом, они не имеют доступа к членам экземпляра.

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes/static

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...