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

Chr*_*ris 10 javascript extjs sencha-touch

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

Ext.apply(app.views, {
        contactsList: new app.views.ContactsList(),
        contactDetail: new app.views.ContactDetail(),
        contactForm: new app.views.ContactForm()
    });
Run Code Online (Sandbox Code Playgroud)

与此标准javascript相反:

app.views.contactsList = new app.views.ContactsList();
app.views.contactDetail = new app.views.ContactDetail();
app.views.contactForm = new app.views.ContactForm();
Run Code Online (Sandbox Code Playgroud)

有什么区别吗?

Bri*_*kau 11

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

给未来读者的一个注释,看看接受的答案:Ext还有Ext.extend一个实际上意味着"继承"一个,而不是Ext.apply[If]仅仅将一个对象实例合并到另一个,或者Ext.override覆盖(没有子类化)一个类定义.根据您的需要,有很多选择.


Nat*_*ard 8

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

在您的情况下,除了提供更易读的代码之外,几乎没有什么区别.