Javascript делает ключи строки объекта перечисляемыми

У меня есть класс, настроенный со строковыми ключами, например:

class MyClass {
    constructor() {
        this.id = 0
        this.data = []
    }

    "GET /data"(req, res) {
        res.json(this.data)
    }
}

Цель состоит в том, чтобы динамически перебирать функции в таком экземпляре:

for (let key in new MyClass()) {
    console.info(key)
}

Однако все, что я пробовал, приводило только к ключам id и data.

Я могу вручную получить функцию и запустить ее нормально:

let item = new MyClass()
item["GET /data"]()

Но он не отображается ни в одном динамическом перечислении, которое я пробовал.

Ручная установка перечисления также работает:

class MyClass {
    constructor() {
        this.id = 0
        this.data = []
        
        // Here!!!
        Object.defineProperty(this, "GET /data", {
            value: this["GET /data"],
            writable: false,
            enumerable: true,
            configurable: true
        })
    }

    "GET /data"(req, res) {
        res.json(this.data)
    }
}

console.info(Object.keys(new MyClass())) // ["id", "data", "GET /data"]

Но это противоречит цели делать это динамически. Есть ли способ либо динамически получить имена функций со строковыми ключами, либо сделать каждое свойство перечисляемым?

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
0
28
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Есть два способа сделать это

Object.keys(myObj)

или

for (let key in myObj) {
}
Ответ принят как подходящий
Object.getOwnPropertyNames(MyClass.prototype)

дает тебе

["constructor", "GET /data"]

Другие вопросы по теме