#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