我从查看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
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/
使用函数可以让您定义默认的数组或对象,而无需在类的所有实例上共享它们。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句