Javascript Ext.apply与简单地在目标上设置值相比有什么意义?

Javascript Ext.apply与简单地在目标上设置值相比有什么意义?,javascript,sencha-touch,extjs,Javascript,Sencha Touch,Extjs,使用Ext.js或sencha,执行以下操作的意义是什么: Ext.apply(app.views, { contactsList: new app.views.ContactsList(), contactDetail: new app.views.ContactDetail(), contactForm: new app.views.ContactForm() }); 与此标准javascript相反: app.views.conta

使用Ext.js或sencha,执行以下操作的意义是什么:

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();

有什么区别吗?

对于接受对象作为参数并需要合并对象的代码来说,这主要是一种方便的方法。合并对象是JavaScript中的常见用例,大多数框架都实现了这种类型的帮助器。(
$.extend
在jQuery中,
对象.extend
在Prototype中,
对象.append
在MooTools中,等等)


在您的情况下,除了提供更可读的代码外,没有什么区别。

Ext.apply
通常更方便(如果需要更少的激活链查找,则可能更高效,如您的示例中所示,尽管这是一个小点)。还有一个变体
Ext.applyIf
,它只应用源对象中不存在于目标对象中的成员,这更有用,因为它可以使您避免大量手动
if()
检查。例如,当将默认值应用于可能已经分配了用户或应用程序定义的属性的配置对象时,这非常有用


未来阅读公认答案的读者需要注意的是:Ext还有
Ext.extend
,它实际上意味着“继承自”一个类,而不是
Ext.apply[If]
,它只是将一个对象实例合并到另一个对象实例中,或者
Ext.override
,它覆盖(不子类化)一个类定义。根据需要,有很多选项。

如果使用Ajax请求从服务器获取配置,则需要Ext.apply。因为Ajax响应是在窗口呈现之后接收的。代码的第二部分不起作用