var foobar = function(param) {
return "FOO : " + foobar.lookup(param);
}
あなたが望むものをあなたに返します
これを理解するには、JavaScript の基本を確認する必要があります。オブジェクトをインスタンス化する方法とオブジェクトとは...
JQuery のようなものを取得するのはそれほど難しくありません。JQuery のメイン オブジェクトは、「静的」関数も持つ単純な関数です。
変数を関数として宣言する
var myFunc = function(){};
変数を使用して静的なもので拡張するには、単にそれを介して割り当てます
myFunc.staticFunc = function(){};
これは、関数をプロトタイプに追加していないため、myFunc.staticFunc の任意のインスタンスでこれを使用して myFunc.staticFunc にアクセスできるという意味ではありません...
インスタンス化できるオブジェクトのようなクラスを定義するには、それを関数として定義し、プロトタイプを拡張します。プロトタイプは、オブジェクトのインスタンスを構築するために使用されるクラス定義です。
myFunc = function(){
// ctor
this.lala = "blub";
} ;
myFunc.prototype.objectFunc = function() {
return this.lala;
}
オブジェクト myFunc には関数 objectFunc が含まれるようになりました。新しいもので初期化する必要があります...
alert(new myFunc().objectFunc());
インスタンスはこれで自分自身にアクセスできます...
jquery のようなものを実行するには、いくつかのトリックを実行する必要があります。グローバル変数は、何でも実装できる「実際の」オブジェクトのインスタンスを返す関数でなければなりません...
次に、myFunc() などの関数であるかのように変数を呼び出すことができます...
次の例で、これがどのように機能するかがより明確になることを願っています: ( jsfiddle で見つけることができます)
(function ($) {
var myRealObj = function (outId, printText) {
this.text = printText;
$("#" + outId).append("<li>" + this.text + "</li>");
};
myRealObj.prototype.objectFunc = function () {
return this.lala
};
var myFunc = function (out, txt) {
return new myRealObj(out, txt);
};
myFunc.someFunc = function () {
myFunc("out", "myFunc.someFunc got called");
};
myFunc.static = {};
myFunc.static.someFunc = function () {
myFunc("out", "myFunc.static.someFunc got called");
};
window.$$ = myFunc;
})($);
$$("out", "test obj function");
$$.someFunc();
$$.static.someFunc();