Javascript 在什么情况下,默认值需要是一个函数?
我从查看Javascript 在什么情况下,默认值需要是一个函数?,javascript,backbone.js,Javascript,Backbone.js,我从查看localtodos应用程序开始,可以看出这段代码使它成为一个函数。我不知道如何做出这个选择。我的假设是,在调用函数之前,函数中的代码不会运行,而对象文本将立即被解释 以下是用例: var FavoritesRow = Backbone.Model.extend({ Name: 'FavoritesRow', defaults: function () { return { url: "http://www.google.com",
localtodos
应用程序开始,可以看出这段代码使它成为一个函数。我不知道如何做出这个选择。我的假设是,在调用函数之前,函数中的代码不会运行,而对象文本将立即被解释
以下是用例:
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"
};
}
});
但是我通常应该遵循什么规则呢?来自:
记住,在JavaScript中,对象是通过引用传递的,所以如果
如果包含一个对象作为默认值,它将在所有用户之间共享
实例。相反,将默认值定义为函数
比较
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
及
使用函数可以定义默认数组或对象,而无需在类的所有实例上共享它们。来自:
记住,在JavaScript中,对象是通过引用传递的,所以如果
如果包含一个对象作为默认值,它将在所有用户之间共享
实例。相反,将默认值定义为函数
比较
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
及
使用函数可以定义默认数组或对象,而无需在类的所有实例上共享这些数组或对象。如果: a) 您需要访问此实例
b) 在构建返回结果时,需要执行条件逻辑 c) 您不希望在所有实例之间共享对象(尽管下面有一个替代方案) 如果您确实使用了一个对象,并且不希望它在类范围内共享,那么您可以在
初始化
中创建一个对象,并将其设置为函数:
this.defaults = {} // Now it is instance-scope
请注意,使用
\uuu0.result
并不总是产生所需的此
上下文。有时最好显式地传递上下文,例如if(u.isFunction(this.x))this.x.call(this)
。在默认情况下。使用结果
,因此您可能需要检查上下文是否确实是模型实例。如果:
a) 您需要访问此
实例b) 在构建返回结果时,需要执行条件逻辑 c) 您不希望在所有实例之间共享对象(尽管下面有一个替代方案) 如果您确实使用了一个对象,并且不希望它在类范围内共享,那么您可以在
初始化
中创建一个对象,并将其设置为函数:
this.defaults = {} // Now it is instance-scope
请注意,使用
\uuu0.result
并不总是产生所需的此
上下文。有时最好显式地传递上下文,例如if(u.isFunction(this.x))this.x.call(this)
。如果是默认值
\u0,则使用result
,因此您可能希望检查上下文是否确实是模型实例。在所有实例之间共享,没有使用新值初始化,就像使用函数一样没有新值或旧值默认值只有一个值。我添加了一个示例,因此当默认值很复杂时,您只需要使用函数,即它们是引用类型。如果我所有的默认值都是原语,那么我就不需要了。因此,他的例子是有道理的。正确吗?在所有实例中共享,没有像使用函数那样使用新值初始化没有新值或旧值默认值只有一个值。我添加了一个示例,因此当默认值很复杂时,您只需要使用函数,即它们是引用类型。如果我所有的默认值都是原语,那么我就不需要了。因此,他的例子是有道理的。对的