我一直在閱讀和測試下面的代碼現在幾個小時,我似乎無法掌握某些東西。 我一直在逐步通過鍍鉻控制檯基本上放在每一行我可以添加和已經檢查,我只是不知道的東西從你的JavaScript模塊模式不知道JS
1)我只是不確定deps數組的目的。對我來說第一件奇怪的事情是,爲什麼腳本不會嘗試將數據放在第一個電話上(從MyModules.define("bar",[],function()
)? 爲什麼腳本第二次調用define(MyModules.define("foo",["bar"], function(bar)
),然後當第一次定義應該首先完成它時,將[「bar」]添加到數組?
2)此代碼modules[name] = impl.apply(impl,deps)
。每個回調,不要使用'這'..所以在這裏適用需要?另外,這可能是我在使用'apply'時回調的理解不足,但是如何閱讀?我想「申請」,一般延續 functionName.apply(obj,[])
在這種情況下,這是幾乎像是在說 functionName.apply(functionName, []) ??
或者,這是不同的,因爲函數本身是匿名的?
var MyModules = (function Manager() {
var modules = {};
function define(name,deps,impl) {
for (var i=0; i<deps.length; i++) {
deps[i] = modules[deps[i]];
}
modules[name] = impl.apply(impl,deps);
}
function get(name) {
return modules[name];
}
return {
define : define,
get: get
};
})();
MyModules.define("bar",[],function() {
function hello(who) {
return "Let me introduce: " + who;
}
return {
hello : hello
};
})
MyModules.define("foo",["bar"], function(bar) {
var hungry = "hippo";
function awesome() {
console.log(bar.hello(hungry).toUpperCase());
}
return {
awesome: awesome
};
});
var bar = MyModules.get("bar");
var foo = MyModules.get("foo");
console.log(bar.hello("hippo"));
foo.awesome();
哇,這真是混亂,它混合了*模塊模式*有依賴關係管理系統模塊... – Bergi