#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;
}