Здесь я пытаюсь узнать больше об объектных свойствах с помощью Object.getOwnPropertyDescriptor. Но когда я использовал нестатический метод, я ничего не получаю в ответ. Я не знаю, в чем причина этого.
Когда я использую метод getName нестатический вывод - неопределенный
class abc {
getName() {
return 'abc class name'
}
}
console.log(Object.getOwnPropertyDescriptor(abc, 'getName'))
Когда я использую метод getName статический вывод - Object {writable: true, enumerable: false, configurable: true}
class abc {
static getName() {
return 'abc class name'
}
}
console.log(Object.getOwnPropertyDescriptor(abc, 'getName'))
Это связано с тем, что в первом сценарии getName()
является экземпляром метода объектов типа abc
:
let a = new abc();
a.getName() //'abc class name'
Во втором сценарии, используя ключевое слово static
вы создаете метод класса:
abc.getName() //'abc class name'
Только во втором сценарии getName
устанавливается как ownProperty
для abc
. В первом сценарии getName
доступен на prototype
.
Причина нестатических методов является частью прототипа:
Object.getOwnPropertyDescriptor(abc.prototype, 'getName')
Как вы знаете, синтаксис класса просто синтаксический shugar для:
function abc(){
//the constructor goes here
}
abc.someStatic = 1;
abc.prototype = {
getName(){
//...
}
};