Ext.apply与仅在目标上设置值有什么关系?

时间:2011-03-11 02:45:11

标签: 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.contactsList = new app.views.ContactsList();
app.views.contactDetail = new app.views.ContactDetail();
app.views.contactForm = new app.views.ContactForm();

有什么不同吗?

3 个答案:

答案 0 :(得分:11)

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

对未来读者的一个注释,他们会看到接受的答案:Ext也有Ext.extend,实际上意味着“继承”,而不仅仅是Ext.apply[If]将对象实例合并到另一个,或Ext.override,它会覆盖(不进行子类化)类定义。很多选择,取决于你需要的。

答案 1 :(得分:8)

它主要作为代码的便捷方法,接受对象作为参数,并且需要合并它。合并对象是JavaScript中的常见用例,这种类型的帮助程序由大多数框架实现。 (jQuery中为$.extend,Prototype中为Object.extend,MooTools中为Object.append等。)

在你的情况下,除了提供更易读的代码之外,几乎没有区别。

答案 2 :(得分:1)

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