Объект определить свойство с классом

1

Здесь я пытаюсь узнать больше об объектных свойствах с помощью 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'))
Теги:

2 ответа

3
Лучший ответ

Это связано с тем, что в первом сценарии getName() является экземпляром метода объектов типа abc:

let a = new abc();
a.getName() //'abc class name'

Во втором сценарии, используя ключевое слово static вы создаете метод класса:

abc.getName() //'abc class name'

Только во втором сценарии getName устанавливается как ownProperty для abc. В первом сценарии getName доступен на prototype.

1

Причина нестатических методов является частью прототипа:

Object.getOwnPropertyDescriptor(abc.prototype, 'getName')

Как вы знаете, синтаксис класса просто синтаксический shugar для:

function abc(){
  //the constructor goes here
}

abc.someStatic = 1;

abc.prototype = {
  getName(){
    //...
  }
};

Ещё вопросы

Сообщество Overcoder
Наверх
Меню