首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我的Backbone默认值应该是一个对象还是一个函数?

问我的Backbone默认值应该是一个对象还是一个函数?
EN

Stack Overflow用户
提问于 2013-06-26 18:50:06
回答 3查看 1.7K关注 0票数 5

我已经阅读并遵循了几个Backbone.js教程,当涉及到模型的默认设置时,人们似乎会使用两种方法之一。

第一种方式-默认值是一个对象

第一种方式是将默认值声明为对象,例如;

代码语言:javascript
复制
my_model = Backbone.Model.extend({
    defaults: {
        title: 'Default Title'
    }
});

这对我来说是最有意义的,我马上就知道默认值是一个对象,它工作得很好。

第二种方式-默认值是一个函数

我看到的第二种方式是默认值被声明为一个函数,例如;

代码语言:javascript
复制
my_model = Backbone.Model.extend({
    defaults: function() {
        return {
            title: 'Default Title'
        }
    }
});

这个函数显然会返回一个对象,对我来说意义不大(除非你最终想要把一些东西传递给这个函数。

我的问题

我的问题是,假设您不会使用函数方式传递任何参数,那么使用一个方法比使用另一个方法更有好处吗?我的感觉是,调用匿名函数可能会有很小的开销,但我希望得到更有见地的意见。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-06-26 19:20:07

请记住,在JavaScript中,对象是通过引用传递的,所以如果包含一个对象作为默认值,它将在所有实例之间共享。如果不希望在所有实例之间共享对象,则应使用函数定义包含通过引用传递的对象的默认值

https://github.com/documentcloud/backbone/issues/1145

总而言之就是这样。仅当您有对象属性时,才推荐使用函数方法。

票数 6
EN

Stack Overflow用户

发布于 2013-06-26 19:22:07

我认为你所描述的两种技术之间没有任何性能差异。默认值的解析方式(=调用的函数或仅返回的对象)由underscore.js中的this line决定:

代码语言:javascript
复制
return _.isFunction(value) ? value.call(object) : value;

至于好处。regular对象提供了一种静态方式来声明模型默认值。你在扩展时声明它们,就这样,它们不会改变。另一方面,该函数为您提供了更改fly的模型默认值的能力,而无需重新创建整个类,方法是修改该函数应返回的对象。

票数 1
EN

Stack Overflow用户

发布于 2021-09-16 20:48:17

使用函数而不是对象的另一个原因是,如果您的某个默认值依赖于模型中的方法。

例如:

代码语言:javascript
复制
defaults: function() {
    return {
        title: this.getTitle()
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17318048

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档