Объяснение определения библиотеки потребностей

StackOverflow https://stackoverflow.com/questions/8350699

  •  27-10-2019
  •  | 
  •  

Вопрос

Я начал читать несколько учебных пособий о потребностях. Ни в одном из них ключевое слово «определить» было удовлетворительно объяснялось для меня. Может ли кто -нибудь помочь мне со следующим:

define(
  ["Models/Person", "Utils/random", "jquery"], 
  function (Person, randomUtility, $) {..}
)  

Что такое "определить"? Определяет ли функцию с массивом и анонимной функцией внутри нее? Или что-то еще? Может ли кто -нибудь дать мне больше информации о такого рода определениях?

Дополнение: Спасибо, Nnnnnn и Pradeek за ваши ответы. Здесь, в Европе, было 2:30 ночью, когда я публиковал вопрос. Может быть, я не узнал, что это был простой вызов функции.

Это было полезно?

Решение

define не специфичен для требований, он является частью Спецификация AMD. Анкет Берк отметит, что TearsJS не реализует точно, как AMD его определяет, поскольку AMD на самом деле не учитывал браузеры.

define В нем нет анонимной функции. define это метод, доступный для файлов JavaScript на основе AMD для загрузки их данных. Библиотеки, такие как redize, делают это доступным для вас. Конкретная реализация, вероятно, не полезна для вас. Так что я пройду тот, который вы предоставили, так как это самый распространенный способ объявить модуль.

define( [array], object );

Массив - это список модулей, от которых зависит этот модуль. Существует связь между модулями и файлами 1 к 1. Вы не можете иметь несколько модулей в файле или несколько файлов для одного модуля.

Объект - это модуль, который вы определяете. Это может быть что угодно, структура или функция, которая возвращает структуру. Прочитать документы на Требуется Больше подробностей.

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

Удачи, я рекомендую поиграть с этим и читать документы, когда что -то не имеет смысла. Требуемые документы великолепны как быстрое начало того, как работают модули AMD.

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

я нашел define Определено около нижней части require.js (мне тоже было интересно, что это за что -то define Слово, и это ответ я искал):

/**
 * The function that handles definitions of modules. Differs from
 * require() in that a string for the module should be the first argument,
 * and the function to execute after dependencies are loaded should
 * return a value to define the module corresponding to the first argument's
 * name.
 */
define = function (name, deps, callback) {
    var node, context;

    //Allow for anonymous modules
    if (typeof name !== 'string') {
        //Adjust args appropriately
        callback = deps;
        deps = name;
        name = null;
    }

    //This module may not have dependencies
    if (!isArray(deps)) {
        callback = deps;
        deps = null;
    }

    //If no name, and callback is a function, then figure out if it a
    //CommonJS thing with dependencies.
    if (!deps && isFunction(callback)) {
        deps = [];
        //Remove comments from the callback string,
        //look for require calls, and pull them into the dependencies,
        //but only if there are function args.
        if (callback.length) {
            callback
                .toString()
                .replace(commentRegExp, '')
                .replace(cjsRequireRegExp, function (match, dep) {
                    deps.push(dep);
                });

            //May be a CommonJS thing even without require calls, but still
            //could use exports, and module. Avoid doing exports and module
            //work though if it just needs require.
            //REQUIRES the function to expect the CommonJS variables in the
            //order listed below.
            deps = (callback.length === 1 ? ['require'] : ['require', 'exports', 'module']).concat(deps);
        }
    }

    //If in IE 6-8 and hit an anonymous define() call, do the interactive
    //work.
    if (useInteractive) {
        node = currentlyAddingScript || getInteractiveScript();
        if (node) {
            if (!name) {
                name = node.getAttribute('data-requiremodule');
            }
            context = contexts[node.getAttribute('data-requirecontext')];
        }
    }

    //Always save off evaluating the def call until the script onload handler.
    //This allows multiple modules to be in a file without prematurely
    //tracing dependencies, and allows for anonymous module support,
    //where the module name is not known until the script onload event
    //occurs. If no context, use the global queue, and get it processed
    //in the onscript load callback.
    (context ? context.defQueue : globalDefQueue).push([name, deps, callback]);
};

Я нашел эту страницу Почему AMD? очень полезно. Подводя итог на этой странице, спецификация AMD полезна для преодоления «Напишите кучу тегов скрипта с неявными зависимостями, которые вы должны заказать вручную». Это полезно при загрузке зависимостей перед выполнением требуемых функций, аналогично import в других языках программирования, таких как Python. AMD также предотвращает проблему загрязнения пространства имен имен. Проверять "It is an improvement over the web's current "globals and script tags" because" раздел.

я думаю Требуется спецификация API Подводит итог довольно хорошо:

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

Они перечисляют примеры всех различных синтаксических форм определения.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top