2015-06-04 45 views
2

我們要聲明的設置的集合在一個插件來使用:

var settings = { x: 0, y: 1 }; 

,然後擴展/在一個電話與用戶選項覆蓋它們:

function x(opts) { 
    opts = $.extend(settings, opts); 
... 
x({ y: 2 }); 

...所有的偉大工程除了當你窩選項:

var settings = { x: 0, y: 1, files: { path: '/', names: { xml: 'x', kml: 'k' } } } 

x({ files: { path: '/tmp' } }); 

其中溼巾出files這樣的名字都沒有了內容。

我的興趣是隻指定文件路徑,但$.extend是不夠聰明來實現這一點。還是它?這通常如何處理?

回答

2

它已經被使用的$.extend深參數來實現:

jQuery.extend([deep ], target, object1 [, objectN ]) 

例如:

var settings = { 
 
    x: 0, 
 
    y: 1, 
 
    files: { 
 
    path: '/', 
 
    names: { 
 
     xml: 'x', 
 
     kml: 'k' 
 
    } 
 
    } 
 
}; 
 

 
function x(opts) { 
 
    opts = $.extend(true, settings, opts); 
 
    console.dir(opts); 
 
} 
 

 
x({ 
 
    files: { 
 
    path: '/tmp' 
 
    } 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script> 
 

 
<!-- open your browser's console to see the output -->

+0

真棒!非常感謝 – ekkis