2011-03-11 54 views
10

使用Ext.js或煎茶,是什麼做的一點如下:Ext.apply與簡單設置目標值有什麼不同?

Ext.apply(app.views, { 
     contactsList: new app.views.ContactsList(), 
     contactDetail: new app.views.ContactDetail(), 
     contactForm: new app.views.ContactForm() 
    }); 

與此相對標準的JavaScript:

app.views.contactsList = new app.views.ContactsList(); 
app.views.contactDetail = new app.views.ContactDetail(); 
app.views.contactForm = new app.views.ContactForm(); 

有什麼區別?

回答

8

它主要是作爲一種方便的方法代碼,它是接受一個對象作爲參數,並需要合併它。合併對象是JavaScript中常見的用例,這種類型的助手是由大多數框架實現的。 ($.extend jQuery中,Object.extend的原型,Object.append在MooTools的,等等)

在你的情況下,有相差不大,不是提供多一點可讀的代碼等。

11

Ext.apply通常更方便(如果需要更少的激活鏈查找,可能效率更高,如您的示例中所示,儘管這是一個小問題)。還有一種變體Ext.applyIf,它只應用來自源對象的目標對象中不存在的成員,這更加有用,因爲它可以省去大量的手動檢查。例如,將默認值應用於可能已經分配了用戶或應用程序定義屬性的配置對象時,這非常有用。

的注意事項,以未來的讀者誰看接受的答案:分機也有Ext.extend這實際上意味着類「繼承」,而不是Ext.apply[If]這只是合併的對象實例到另一個,或Ext.override它覆蓋(沒有子類化)類定義。很多選擇,取決於你需要什麼。

1

如果您使用Ajax請求從服務器獲取配置,則需要Ext.apply。因爲稍後會在窗口呈現後收到Ajax響應。你的代碼的第二部分將不起作用。

相關問題