主干“记住”属性中的值
Backbone "remembering" values in properties
我有一个基本模型:
myTestModel = Backbone.Model.extend({
defaults: {
title: 'My Title',
config: {},
active: 1,
}
})
那里没有什么特别的,但是我注意到config
选项中的值在实例之间被记住。例如:
var test1 = new myTestModel();
test1.set('title', 'A New Title');
test1.get('config').screen_name = 'Joe';
alert( test1.get('title') ); // 'A New Title', expected.
alert( test1.get('config').screen_name ); // 'Joe', expected.
var test2 = new myTestModel();
alert( test2.get('title') ); // 'My Title', expected.
alert( test2.get('config').screen_name ); // 'Joe', NOT expected.
那么,为什么在test2
,screen_name
被保存下来,免受test1
?如何防止这种情况发生?
您偶然发现了 Javascript 中的一个陷阱,如 model.defaults
文档中所述:
请记住,在 JavaScript 中,对象是通过引用传递的,所以如果 您包含一个对象作为默认值,它将在所有人之间共享 实例。相反,将默认值定义为函数。
您可以使用函数而不是哈希来设置默认值:
myTestModel = Backbone.Model.extend({
defaults: function () {
return {
title: 'My Title',
config: {},
active: 1
};
}
});
还有一个演示 http://jsfiddle.net/nikoshr/Y7PYj/
相关文章:
- RegEx删除空属性?例如,如果(class=“”||class=“”)移除;否则就下课
- 全局变量和全局对象的属性之间有什么区别吗
- 如果使用 lodash 将属性存在于另一个对象中,则向对象添加属性
- 如何在Bootstrap Modal中为动态点击生成的变量设置jade属性
- 序列化数据属性中对象的最可靠方法
- 分析高度属性时出现意外值{{specs.height}}.index.html
- TypeError:无法读取属性'推'未定义的JavaScript
- 同样,同样的错误'ahorcado.js:26未捕获类型错误:无法读取属性'beginPath'
- AngularJS-使用'true'属性
- 可以't使用JavaScript获取width属性
- 未捕获的TypeError无法读取未定义的属性socialsharing
- 如何使用javascript获取嵌套对象中所有子对象的单个属性
- JavaScript Pub/Sub属性访问问题
- 从JavaScript访问struts操作中的属性
- 是否可以从父类访问子类的属性
- 如何更改reactjs中外部/独立组件的状态或属性
- 如何在选项卡上定义属性'的主窗口对象
- 锚点元素的href属性自动更改
- 主干“记住”属性中的值
- __proto__为什么以及如何记住构造函数的旧属性's未定义的原型成员