Прототип с использованием квадратных скобок (только ванильное решение JS)

#javascript #prototype

#javascript #прототип

Вопрос:

Как я могу применить прототип к функции конструктора, используя (квадратные скобки). Я не хочу использовать точечную нотацию, потому что она не вычисляет переменную, а скорее возвращает имя переменной, и я хочу, чтобы прототип был более динамичным. Ниже приведено то, чего я пытаюсь достичь, но я не могу заставить это работать.

 var prototyper = function(constructor_name, prototype_name, data)
{
     main[constructor_name][__prototype__][prototype_name] = new Function(data);
}
  

прототип («классифицировать», «alert_classification», «оповещение (this.classification)»);

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

1. Вы почти никогда не должны использовать new Function .

2. Кажется, вы хотите __prototype__ === "prototype" или просто используете main[…].prototype[…] = …

3. » Я не хочу использовать точечную нотацию » — вы можете уточнить? Кажется, это именно то, что вы на самом деле хотите. И вы могли бы заставить свою функцию работать с ним, не так ли?

4. @Bergi Мне любопытно, почему вы сказали, что я почти никогда не должен использовать новую функцию. Это безопаснее, чем вызов eval, и я могу использовать его, если я не передаю ему параметры напрямую. Я использую массив аргументов для получения параметров.

5. Это не имеет значения для вызова функции, но для определения функции. Нет, оно того не стоит, так как в нем нет выгоды, а только недостатки. Не обрабатывайте код как текст, если в этом нет необходимости.

Ответ №1:

Вы хотите использовать скобки для обозначения свойств переменных ( …[constructor_name] и …[prototype_name] ), но точечные обозначения для свойства константы ….prototype . Вам нужно будет смешать их в

 function prototyper(constructor_name, method_name, fn) {
    main[constructor_name].prototype[method_name] = fn;
}
  

(демонстрация jsfiddle)