構文

2011-01-24 6 views
4

は、この背後にあるロジックは何であるのJavaScriptオブジェクト:私は例えば、それはjQueryでたくさん見構文

オブジェクト=オブジェクト=機能

、1.4.4行99:

jQuery.fn = jQuery.prototype = { 
init: function(selector, context) { 

またはライン332:

jQuery.extend = jQuery.fn.extend = function() { 

なぜこの構文を使用しますか?

答えて

4

それは同じものを2つのオブジェクトを設定します:文が評価された後、両方のjQuery.fnとjQuery.prototype ポイント同じオブジェクト({init: function() {...}}

したがって、jQuery.prototype.initとjQueryに。 fn.initは両方とも同じ関数を指しています(両方とも同じオブジェクトへの参照なので)

これは構文的な砂糖のためです。 jQuery.prototypeをオブジェクトに設定すると、新しいjQueryのすべてのインスタンスがすべて、そのプロトタイプからinitメソッドを共有するようになります。 jQueryは、ユーザーフレンドリーで、新しいメソッドをjQueryインスタンスに追加するエイリアスを作成します。そのエイリアスはjQuery.fnで、$ .fnとしても知られています。

+0

したがって、上記の例は次のように入力します。 jQuery.prototype.fn = {}; – Sam

+0

いいえ、それは 'var obj = {...};と同じです。 jQuery.fn = obj; jQuery.prototype = obj;ウィンドウを削除する。 –

+0

OK、ここに私と一緒にいてください。つまり、オブジェクトにはinitという名前の関数があり、jQuery.prototypeにはinitという名前の関数があり、jQuery.fnも同様です。 – Sam

1

これは同時にjQuery.fnjQuery.prototype(第1例)の両方に機能を割り当てるい

object1 = something; 
object2 = object1; 
3

=代入演算子は右から左に動作します。

最初に、右端の値の最も左側の変数またはプロパティに最も近い値を割り当てます。=

それからそれは左に続き、その同じ値を次の=の左にある変数またはプロパティに割り当てます(やはり右から左に行く)。 MDC docs for assignment operatorから

基本的な代入演算子は等しい(=)、その左オペランドに対する右オペランドの値を割り当てます。つまり、x = yはyの値をxに代入します。

var obj = { some:'object' }; // obj is referencing an object 

var a,b; // declare a couple of variables 

a = b = obj; // now all three are referencing the object referenced by "obj" 

だから、それはこのように書きます:

この例を見てみましょうobjの値が割り当てられます

  • obj{ some:'object' }

  • bへの参照が割り当てられていますへの参照です

  • a次に、その2つのオブジェクトに同じ値を割り当てる上記回答全てがヒット{ some:'object' }

1

への参照であるbの値を割り当てられます。理由はそれほど明確ではないかもしれません。 2番目の例は少し説明しやすいです。 jQuery.fnのすべてのメンバーは$()の戻り値にアタッチされます。あなたは、次の..

jQuery.fn.myFunc = function() { return 'blah'; } 

をしたのであればあなたは

$('#blah').myFunc(); // returns 'blah' 

が延長になるだろう現在のオブジェクトへのオブジェクトのメンバーを配置された添加ヘルパー関数です。 jQueryはこれらのメソッドを使用して静的メソッド(jQuery.getJSON)と '動的'メソッド($('.class').load())を構築します。これにより、開発中にコードを分離することができます。たとえば、ajax.jsはjQuery.fn.extendを使用してload、serialize、getScriptなどのメソッドを追加し、jQuery.extendを使用してjQuery.ajaxなどのメソッドを追加します。