gpt4 book ai didi

javascript - 在属性更改时引用主干默认值

转载 作者:可可西里 更新时间:2023-11-01 02:30:34 25 4
gpt4 key购买 nike

我有以下模型:

var Soq = Backbone.model.extend({
default:{
'name': 'something'
, 'parents': [] //array will be passed by reference to attributes hash on new object instantiation
}
});

我是 javascript 和 backbone 的新手,但查看源代码我认为可能发生的情况是,当此模型的属性设置为默认值(backbone.js:137)并且默认值是一个对象时,它由引用。这意味着当我做这样的事情时:

var soq = new Soq;
var parents = soq.get('parents');
parents.push('parent'); //changes defaults of the proto object

var soq2 = new Soq;
console.log(soq2.get('parents');); //will output ['parent']
console.log(soq2.defaults.parents); //will output ['parent']

我的理解是否正确?如果是,设置对象默认值的最佳方式是什么,而不会在未来实例引用它们时随时更改它们?

如果我不清楚或误解了什么,请告诉我。提前感谢您的宝贵时间。

最佳答案

您的“ parent ”属性在每个实例上都是相同的,因为它是在原型(prototype)上设置的。换句话说,在构造模型时将使用相同的对象来设置模型,因此您将获得相同的数组引用。

相反,您希望在每次构建新模型时都创建一个新的默认对象。 Backbone 允许您将默认值定义为一个函数:

defaults: function() { 
return {
name: 'something',
parents: []
};
}

关于javascript - 在属性更改时引用主干默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7673791/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com