kb84tkhrのブログ

何を書こうか考え中です あ、あと組織とは関係ないってやつです 個人的なやつ

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するというのはこのmoduleInfomoduleNameを結びつけて $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はおしまい