Как я называю динамично названный метод в JavaScript?

Раннее программное обеспечение часто было модальным, но в какой-то момент удобство использования отошло от этого стиля.

Редакторы, основанные на ВП, являются полными загадками - они единственные настоящие выжившие члены такого порядка программного обеспечения.

Режимы - нет-нет в дизайне удобства использования и взаимодействия, потому что мы, люди, непостоянные млекопитающие, которым нельзя доверять, чтобы помнить, в каком режиме находится приложение.

Если вы думаете, что находитесь в одном " режим ", когда вы на самом деле в другом, то может последовать всякого рода вредности. То, что вы считаете серией безобидных нажатий клавиш, может (в неправильном режиме) привести к неограниченной катастрофе. Это известно как «ошибка режима».

Чтобы узнать больше, ищите термин «немодальный» (и «удобство использования»).

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

95
задан Triptych 9 June 2009 в 12:30
поделиться

2 ответа

Предполагая, что метод populate_Colours находится в глобальном пространстве имен, вы можете использовать следующий код, который использует как возможность доступа ко всем свойствам объекта, как если бы объект был ассоциативным массивом, так и то, что все глобальные объекты на самом деле являются свойствами хост-объекта window .

var method_name = "Colours";
var method_prefix = "populate_";

// Call function:
window[method_prefix + method_name](arg1, arg2);
189
ответ дан 24 November 2019 в 05:45
поделиться

Как указывает Триптих, вы можете вызвать любую функцию глобальной области видимости, найдя ее в содержимом хост-объекта.

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

var dyn_functions = [];
dyn_functions['populate_Colours'] = function (arg1, arg2) { 
                // function body
           };
dyn_functions['populate_Shapes'] = function (arg1, arg2) { 
                // function body
           };
// calling one of the functions
var result = dyn_functions['populate_Shapes'](1, 2);
// this works as well due to the similarity between arrays and objects
var result2 = dyn_functions.populate_Shapes(1, 2);

Этот массив также может быть свойством какого-либо объекта, кроме глобального объекта хоста, что означает, что вы можете эффективно создать свое собственное пространство имен, как это делают многие библиотеки JS, такие как jQuery. Это полезно для уменьшения конфликтов, если / когда вы включаете несколько отдельных служебных библиотек на одну страницу, и (если это позволяют другие части вашего дизайна) может упростить повторное использование кода на других страницах.

Вы также можете использовать объект вот так, который вы могли бы найти чище:

var dyn_functions = {};
dyn_functions.populate_Colours = function (arg1, arg2) { 
                // function body
           };
dyn_functions['populate_Shapes'] = function (arg1, arg2) { 
                // function body
           };
// calling one of the functions
var result = dyn_functions.populate_Shapes(1, 2);
// this works as well due to the similarity between arrays and objects
var result2 = dyn_functions['populate_Shapes'](1, 2);

Обратите внимание, что для массива или объекта вы можете использовать любой метод настройки или доступа к функциям, и, конечно, можете хранить там и другие объекты. Вы можете дополнительно сократить синтаксис любого метода для контента, который не является таким динамичным, используя буквальную нотацию JS, например:

var dyn_functions = {
           populate_Colours:function (arg1, arg2) { 
                // function body
           };
         , populate_Shapes:function (arg1, arg2) { 
                // function body
           };
};

Изменить: конечно, для более крупных функциональных блоков вы можете расширить приведенное выше до очень распространенного «шаблона модуля» который является популярным способом упорядоченной инкапсуляции функций кода.

36
ответ дан 24 November 2019 в 05:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: