Где находятся методы в объекте, созданные с использованием класса в Javascript

#javascript #class #object

#javascript #класс #объект

Вопрос:

Предполагая, что существует класс, который имеет как свойство, так и метод (ы). При создании объектов из этого класса с использованием ключевого слова new и, скажем, печати на консоли, в объекте отображается только имя свойства, почему теперь отображаются методы? Я могу получить доступ к методам в коде.

Пример кода,

 class A {
  propA = true;
  methodA() { return true; }
  methodB() { return true; }
}

console.log("Object of A -> ", new A());
// Object of A ->  A { propA: true }
 

P.S. Я использую typescript

Комментарии:

1. а) они не поддаются перечислению б) они унаследованы от прототипа. new A не создает никаких методов.

Ответ №1:

Вам нужно получить доступ к прототипу, а затем получить свойства

Пример кода здесь:

 class A {
  propA = true;
  methodA() { return true; }
  methodB() { return true; }
}

console.log("Object of A -> ", Object.getOwnPropertyNames(Object.getPrototypeOf(new A())));
//Object of A -> ["constructor", "methodA", "methodB"]
 

Комментарии:

1. Отлично. Но можете ли вы объяснить, почему это происходит?

2. Итак, создаваемый вами экземпляр похож на объект, и если вы напечатаете его, вы получите все атрибуты, поскольку вы хотите получить методы, которые он содержит, вам нужно получить прототип класса (подробнее о prototype здесь: developer.mozilla.org/en-US/docs/Learn/JavaScript/Objects /… ), а затем вы можете получить доступ ксвойства из класса, а не из экземпляра. вы можете прочитать больше об отражении здесь: javascripttutorial.net/es6/javascript-reflection