Группировка функций в JavaScript

Я пытаюсь сгруппировать функции в javascript, хотя мне трудно понять, как отслеживать группы. В приведенном ниже примере мой вопрос: как «some.get('anotherContent')» знает, что он запрошен под псевдонимом «anotherSomeSome», а не «anotherSome». Я имею в виду, как отслеживать различные псевдонимы в этой модели? Ниже приведено то, что я пробовал, но мне кажется, что это довольно сложно и трудно отслеживать псевдонимы:

class someClass {
    alias(callback) {
        callback();
        return this;
    }

    get(content) {
        return 'some' + content;
    }
}

const some = new someClass();

some.alias('some', () => {
    some.alias('anotherSome', () => {
        some.get('content')
    })
    
    some.get('contents')

    some.alias('anotherSomeSome', () {
        some.get('anotherContent')
    })
})

Принимает ли alias один параметр или два? И какой цели вы хотите, чтобы это служило?

Jeff Bowman 27.04.2024 20:53

Ваша функция some.alias() определена как принимающая один параметр, но ваш код передает ей два параметра.

Pointy 27.04.2024 21:46

почему ты используешь классы?

user23517752 27.04.2024 21:49
Поведение ключевого слова "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) для оценки ваших знаний,...
0
3
51
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

На первый взгляд это похоже на проблему XY... В любом случае.

Простым подходом было бы детализация аргументов: таким образом, вы передаете свой псевдоним в стек вместе с аргументами.

Если ваш код синхронизирован, вы можете сохранить свой псевдоним в свойстве класса. В моем случае я сохраняю его в массиве path, чтобы можно было отслеживать весь стек.

class someClass {
    path = [];
    alias(alias, callback) {
        this.path.push(alias);
        callback();
        this.path.pop();
        return this;
    }

    get(content) {
        console.info(this.path.join(' / '), 'some' + content);
    }
}

const some = new someClass();

some.alias('some', () => {
    some.alias('anotherSome', () => {
        some.get('content')
    })
    
    some.get('contents')

    some.alias('anotherSomeSome', () => {
        some.get('anotherContent')
    })
})

Как только вы вводите асинхронный (и, возможно, более сложный) код, вам необходимо отслеживать свои вызовы. Мне кажется интересным использовать прокси, который возвращает экземпляр some с индивидуальным путем:

class someClass {
    path = [];
    alias(alias, callback) {
        callback(new Proxy(this, {
          get(self, prop){
            if (prop === 'path'){
              return [...self.path, alias];
            }
            return Reflect.get(...arguments);
          }
        }));
        return this;
    }

    get(content) {
        console.info(this.path.join(' / '), 'some' + content);
    }
}

const some = new someClass();

some.alias('some', some => {
    some.alias('anotherSome', some => {
        some.get('content')
    })
    
    some.get('contents')

    some.alias('anotherSomeSome', some => {
        some.get('anotherContent')
    })
})

Это действительно очень интересно. Не знал, что можно перехватить через прокси. Спасибо большое

simon 28.04.2024 01:26

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