2013-09-24 100 views
0

你好,我知道這個問題已經被問了很多次,但是有太多的意見和論點。我沒有最好的經驗來驗證答案,所以在這裏我會解釋我在找什麼,也許你可以指點我正確的方向。擴展javascript對象及其屬性

在我的應用我已經創建了一個對象,具有一些方法,大多有一組預定義的默認值,就像這樣:

module.exports = { 

    submit: function(options) { 

     var defaults = { 
      _id: 1453, 
      text: 'Some text', 
      dataObj:{ 
       links: 3532, 
       arr: ['James','Paul','Lina'], 
      }, 
      dims:{ 
       width: getClientWidth(), 
       height: getClientHeight() 
      } 
     } 

     options.extend(defaults); 

     return sendData(defaults); 

    } 

    // other similar methods - functions 

}; 

什麼我感興趣的是擴展性能和屬性的默認局部變量。正如你所看到的,默認值是一個複雜的結構化對象。請記住,期權結構可能更加複雜。所以如果我沒有弄錯,簡單的淺層合併/複製可能並不理想。

用法,你可以想像:

var app = { 
    // stuff 
} 

app.fn = require('common/lib.js'); 

app.initialize(function(){ 
    var settings = { 
     // hell here 
    } 
    app.fn.submit(settings) 
}) 

預先感謝您。

PS。沒有圖書館正在使用,我對任何方式的純粹的JavaScript實現的extend()函數感興趣。

+0

您正在使用或的NodeJS在瀏覽器中運行的呢?無論如何,請嘗試:'options.extend(true,defaults);'它設置一個'深度複製'標誌。編輯:至少爲它應該的一些庫。不太確定你的擴展函數來自哪裏。 – Hless

+0

我不使用庫,這是我正在開發的一個應用程序項目,我正在尋找一個純粹的JavaScript解決方案 – Syd

回答

0

類似的問題在這裏問: deep extend (like jQuery's) for nodeJS

從接受的答案的擴展功能,只要複製到您的項目,所以它是正確的範圍內使用。然後使用它像這樣: options = extend(true, defaults, options);

你設置的對象可能看起來像以下內容,將在默認的頂部正確合併:

var settings = { 
    text: "Other text", 
    dataObj:{ 
    links: 3531 
    } 
};