Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Backbone.js 我的主干默认值应该是对象还是函数?_Backbone.js - Fatal编程技术网

Backbone.js 我的主干默认值应该是对象还是函数?

Backbone.js 我的主干默认值应该是对象还是函数?,backbone.js,Backbone.js,我一直在阅读和遵循几个Backbone.js教程,当谈到模型的默认设置时,人们似乎会用两种方法之一来完成 第一种方式-默认值是一个对象 例如,第一种方法是将默认值声明为对象 my_model = Backbone.Model.extend({ defaults: { title: 'Default Title' } }); my_model = Backbone.Model.extend({ defaults: function() {

我一直在阅读和遵循几个Backbone.js教程,当谈到模型的默认设置时,人们似乎会用两种方法之一来完成

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

my_model = Backbone.Model.extend({
    defaults: {
        title: 'Default Title'
    }
});
my_model = Backbone.Model.extend({
    defaults: function() {
        return {
            title: 'Default Title'
        }
    }
});
这对我来说是最有意义的,我立即知道默认值是一个对象,它工作得很好

第二种方法-默认值是一个函数 我看到的第二种情况是,默认值被声明为一个函数,例如

my_model = Backbone.Model.extend({
    defaults: {
        title: 'Default Title'
    }
});
my_model = Backbone.Model.extend({
    defaults: function() {
        return {
            title: 'Default Title'
        }
    }
});
这个函数显然最终返回了一个对象,对我来说没有什么意义(除非你最终想把一些东西传递给函数)

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

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


大致概括起来。只有当您具有对象属性时才建议使用函数方法。

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

return _.isFunction(value) ? value.call(object) : value;

至于好处。常规对象提供了一种静态的方式来声明模型默认值。您在扩展时声明它们,这样它们就不会改变。另一方面,函数通过修改该函数不应更改的对象,使您能够更改fly的模型默认值,而无需重新创建整个类o return.

谢谢。我绞尽脑汁想弄清楚为什么在模型中实例化的集合可以从该模型的所有实例中访问。我希望在每个模型中都有新的集合。使用函数就是答案。