2009-08-06 17 views
0

次のjQueryは、デフォルトまたはオプションの値を変更しません。戻り値は空と同じです。空が変更され、マージされたデータが入力されました。すべてが良いです。

var empty = {} 
var defaults = { validate: false, limit: 5, name: "foo" }; 
var options = { validate: true, name: "bar" }; 
$.extend(empty, defaults, options); 

しかし、私は誰かが最初のオプションとして真実を通過するのを見ました。この場合、デフォルトで

var defaults = { validate: false, limit: 5, name: "foo" }; 
var options = { validate: true, name: "bar" }; 
var output = $.extend(true, defaults, options); 

changed.optionsされている同じであり、戻り値はデフォルト値と同じです。

今度はfalseを渡してみてください。

var defaults = { validate: false, limit: 5, name: "foo" }; 
var options = { validate: true, name: "bar" }; 
var output = $.extend(false, defaults, options); 

この場合、デフォルトとオプションは変更されません。したがって、実際の通過は

var defaults = { validate: false, limit: 5, name: "foo" }; 
var options = { validate: true, name: "bar" }; 
var output = $.extend(defaults, options); 
+1

私はちょうどここに座って、あなたが話していることを知っているようにふりをします。 –

答えて

1

と同じです。これは予期された動作です。最初の引数としてtrueを渡すと、オブジェクト構造を共有するのではなく、詳細コピーを作成することを意味します。次の引数defaultsは、そのパラメータがtrueのときにオプションのブール型ディープコピーパラメータを含めることでターゲットになります。ここでは1.3.2からの関連抜粋です:

// copy reference to target object 
var target = arguments[0] || {}, i = 1, length = arguments.length, deep = false, options; 

// Handle a deep copy situation 
if (typeof target === "boolean") { 
    deep = target; 
    target = arguments[1] || {}; 
    // skip the boolean and the target 
    i = 2; 
} 

あなたはfalseを指定した場合、あなたはそれが暗黙のうち対象となる新しいオブジェクトを構築していることがわかります。このターゲットは、次の両方のオブジェクトのディープコピーです。

これはextendのオプションに記載されています。

+0

私はこのツールを使ってドキュメントを見ています。 http://view.jquery.com/trunk/tools/api-browser/#link-jQueryextend-targetobject1objectN これまで私が見ていたURLは古いか半分の情報しかないようです。 ありがとうございます。メインのjQueryドキュメントを参照してみましょう。 –