我的Backbone默认是对象还是函数?

Tob*_*oby 5 backbone.js

我一直在阅读和关注几个Backbone.js教程,当谈到模型的默认设置时,人们似乎有两种方式.

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

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

my_model = Backbone.Model.extend({
    defaults: {
        title: 'Default Title'
    }
});
Run Code Online (Sandbox Code Playgroud)

这对我来说最有意义,我立即知道默认值是一个对象,它工作正常.

第二种方式 - 默认值是一种功能

我看到的第二种方法是将默认值声明为函数,例如;

my_model = Backbone.Model.extend({
    defaults: function() {
        return {
            title: 'Default Title'
        }
    }
});
Run Code Online (Sandbox Code Playgroud)

这个函数显然最终返回一个对象,对我来说没什么意义(除非你想最终将一些东西传递给函数).

我的问题

我的问题是,假设您不会使用函数方式传递任何参数,使用一个优于另一个是否有好处.我的感觉是,通过调用匿名函数可能会有一个微不足道的开销,但会喜欢更明智的意见.

小智 6

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

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

几乎可以总结一下.仅当您具有对象属性时,才建议使用该函数方法.