2010-11-20 2 views
3

これは非常に複雑な答え、あるいは私が完全に見逃してしまった非常に単純なもので簡単な質問になるかもしれませんが、PrototypeやjQueryなどのライブラリでは、どのようにしてグローバル変数が関数は、例えば:

$.ajax.get(…); 

と、関数自体は、のように:

$("…"); 

すべてのヘルプ、より多くの説明Webサイトにも、ポインタは輝かしいだろう、私は興味をそそらよ!例えば

、私のような子オブジェクト(ajax)含まれている関数($)、作成した場合:私はどのように行う、$.ajaxが好き$().ajaxようajaxオブジェクトにアクセスしますが、できませんでし

var $ = function() { 
    this.ajax = {}; 
    return this; 
}; 

を両方を取得する?

+2

関数は、JavaScriptのファーストクラスの市民です。彼らは独自のプロパティ、関数、プロトタイプを持つことができます。 – Alex

答えて

7

JavaScriptでは、関数はオブジェクトであり、オブジェクトはプロパティを持つ可能性があるので、言語の素晴らしい部分です。

var f = function(x) { return x; }; 
f.attr = "a"; 
f.attr; // => "a" 
f(123); // => 123 
+0

@maericsありがとう、私はすべての関数がオブジェクトであることを知っていますが、どうやってそのようなことをコーディングするのでしょうか?私は質問を例で更新します。 –

+1

@Jonathon:このフォローアップを見越して、私は既に例を追加しました=) – maerics

+0

あなたは素晴らしい星です!私は1分で受け入れることができます。そして、カウント! –

3

すべてのjavascript関数はjavascriptオブジェクトです。あなたはすべてここでそれについて学ぶことができ

var obj = {}; 
var func = new function(){}; 

obj.property = ""; 
func.property = ""; 

http://ejohn.org/apps/learn/#16

0
var $ = (function() { 

    var keys = { a: 1, b: 2, c: "Bob" }, 
     external_func = function (key, val) { 
      if (val === undefined) { return keys[key]; } 
      keys[key] = val; 
      extend(external_func, { key : val }); 
     }; 

    function extend (obj, keys) { 
     var key; 
     for (key in keys) { 
      if (keys.hasOwnProperty(key)) { 
       obj[key] = keys[key]; 
      } 
     } 
    } 

    extend(external_func, keys); 
    external_func.setKey = function (key, val) { keys[key] = val; this[key] = val; }; 
    return external_func; 
}()); 

jQueryのちょうどこのより多くの大きな が、これはあなたがキーと値を保存し、システムを構築することができる方法の一例であるかもしれません、関数呼び出しまたはプロパティとして読み取ることができます。例えば

キーはURL内のすべてのクエリの内訳を開催し、またはページのすべてのCookieを保持していた場合、あなたのような何かを行うことができます:

クッキー(「ログイン中の」); Cookie ["logged-in"]; Cookie.username;

クエリ( "page_name"); クエリ["page_name"]; Query.page_name; ;

機能を使用するか、機能に添付されたsetCookieメソッドを使用するか、ネイティブゲッターとセッターをサポートするブラウザーのみをターゲットにしている場合を除き、必ず読み取り専用として扱うようにしてください。

関連する問題