TiddlyWikiのソースを読む 続き2
$tw.modules = {
titles: {}, // hashmap by module name of moduleInfo
types: {} // hashmap by module type and then name of moduleInfo
};
このへんからモジュールシステムの話
$tw.modules.define = function(moduleName,moduleType,definition) {
// Create the moduleInfo
var moduleInfo = {
moduleType: moduleType,
definition: definition,
exports: undefined
};
モジュールをdefine
するというのはこのmoduleInfo
とmoduleName
を結びつけて $tw.modules
に覚えておくこと
if(typeof moduleInfo.definition === "object") {
moduleInfo.exports = definition;
}
definition
がobjectならそのままエクスポート、ってどういうことだ どんなオブジェクトなんだ これは実例が出てくるまでわからなさそうだ
ところでtypeofはカッコいらないんだ 関数じゃなくて演算子か
if(Object.prototype.hasOwnProperty.call($tw.modules.titles,moduleName)) {
console.log("Warning: Redefined module - " + moduleName);
}
$tw.modules.titles[moduleName] = moduleInfo;
ここのcall
っていうのは何をcallしてることになるのかな ひとつめの引数がthis
になるんだ ということは$tw.modules.hasOwnProperty(moduleName)
ってことか なんでそう書かない/書けないのかな?
これはモジュールの名前からモジュールを探すためのもので、続く
if(!Object.prototype.hasOwnProperty.call($tw.modules.types,moduleType))
:
$tw.modules.types[moduleType][moduleName] = moduleInfo;
はタイプからモジュールを探すためのもの、ってことだろう タイプでモジュールを指定するから拡張性がうんぬんかんぬんって書いてあったし
これでCommonJSのものとはまた別の、TiddlyWikiのモジュールシステムができました ってこと? すこし混乱しそうだな
続き
$tw.preloadTiddlers = $tw.preloadTiddlers || [];
$tw.preloadTiddler = function(fields) {
$tw.preloadTiddlers.push(fields);
};
あらかじめpreloadTiddlers
に何か入れておくと使えるよ、というしくみらしい 通常はからっぽと思われる
{}
を使ったり[]
を使ったりしているけれどもこれはちゃんと使い分けてるのかな []
はArrayだからlength
が使えたりする、くらいの違い? そうそうObject.create(null)
はなんにも継承してないオブジェクトなのね
とこうやって作った$tw
を返して_bootprefix
はおしまい
という関数をexportしてbootprefix.jsはおしまい