它可以做到。我有一個這樣的插件right here。這裏的一般結構:
(function (factory) {
// If in an AMD environment, define() our module, else use the
// jQuery global.
'use strict';
if (typeof define === 'function' && define.amd)
define(['jquery'], factory);
else
factory(jQuery);
}(function ($) {
'use strict';
// This is the plugin proper.
$.fn.myMethod = function(/* ... */) {
// Code for the method...
};
}));
需要其他的東西不僅僅是jQuery的會使用上面進行了以下修改的結構的插件:
到define
調用,列出所需要的附加模塊。
A factory(jQuery)
在jQuery
之後調用(在非AMD分支中,當RequireJS未加載插件時使用)從全局空間傳遞附加值。
工廠函數function ($)
有額外的參數來接收傳遞給它的附加值。
因此,如果需要的插件模塊foo
其中出口本身在全球空間foo
,並用RequireJS配置名稱它"foo"
,則:
(function (factory) {
// If in an AMD environment, define() our module, else use the
// jQuery global.
'use strict';
if (typeof define === 'function' && define.amd)
define(['jquery', 'foo'], factory);
else
factory(jQuery, foo);
}(function ($, foo) {
'use strict';
// This is the plugin proper.
$.fn.myMethod = function(/* ... */) {
// Code for the method...
foo.blah();
};
}));
你能向我解釋了什麼'factory '變量是在這種情況下? – fraxture
'factory'是第一個匿名函數中唯一的參數。在最頂層的第一個代碼片段中,你有一個匿名函數('function(factory){...}'),它是用另一個匿名函數('function($){...}')調用的參數。所以,當第一個匿名函數執行時,'factory'參數的值是'function($){...}'。 – Louis