在什么情况下默认值需要是一个函数? [英] In what cases does defaults need to be a function?

查看:21
本文介绍了在什么情况下默认值需要是一个函数?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我首先查看了 localtodos 应用程序,可以看到这段代码使它成为一个函数.我不知道如何做出这个选择.我的假设是函数中的代码不会运行,直到您调用将立即解释的不同的函数和对象文字.

I started by looking at the localtodos app and can see that this code makes it a function. I don't know how to make this choice. My assumption is that the code in the function is not run untill you call the function unlike and object literal which will be interpreted immediately.

这是用例:

var FavoritesRow = Backbone.Model.extend({
    Name: 'FavoritesRow',
    defaults: function () {
        return {
            url: "http://www.google.com",
            title: "google",
            favicon: "http://www.google.com/favicon.ico",
            tag: "search"
        };
    }
});

但是我一般应该遵循哪些规则/规则?

But what rule / rules should I follow in general?

推荐答案

来自 model 的精美手册.defaults:

请记住,在 JavaScript 中,对象是通过引用传递的,因此如果您包含一个对象作为默认值,它将在所有对象之间共享实例.相反,将默认值定义为函数.

Remember that in JavaScript, objects are passed by reference, so if you include an object as a default value, it will be shared among all instances. Instead, define defaults as a function.

比较

var M = Backbone.Model.extend({
    defaults: {
        obj: {}
    }
});

var m1 = new M();
var m2 = new M();
console.log(m1.get('obj') === m2.get('obj'));
// ==> outputs true

http://jsfiddle.net/nikoshr/6ctZ2/

var M = Backbone.Model.extend({
    defaults: function() {
        return {
            obj: {}
        };
    }
});

var m1 = new M();
var m2 = new M();
console.log(m1.get('obj') === m2.get('obj'));
// ==> outputs false

http://jsfiddle.net/nikoshr/6ctZ2/1/

使用函数可以让您定义默认数组或对象,而无需在类的所有实例上共享它们.

Using a function will let you define default arrays or objects without sharing them on all instances of the class.

这篇关于在什么情况下默认值需要是一个函数?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆