【发布时间】:2016-04-01 23:07:47
【问题描述】:
我有一个具有一些默认属性的 JS 类。我希望能够传入一个选项对象来覆盖默认值以及一些未默认的附加值。我在构造函数中使用了 lodash 的 extend 方法来完成此操作。
其中一个默认属性是数组。如果我实例化第一个实例并将一个新值推送到数组中,当我实例化第二个对象时,默认数组包含我推送到第一个实例中的对象。
以这段代码为例……
MyClass = (function() {
var defaults = {
myArr: [],
myProp: 'I\'m a default value'
};
function MyClass(options) {
// console.log(defaults)
if(typeof options === 'object') {
return _.extend(this, defaults, options);
}
else {
return _.extend(this, defaults);
}
}
return MyClass;
})();
var myObj = new MyClass({foo: 'bar'})
myObj.myArr.push('baz')
var mySecondObj = new MyClass();
console.log(mySecondObj) // MyClass {myArr: Array[1]}
我希望 mySecondObj.myArr 是一个空数组。
当我将一个值推入myObj.myArr 时,defaults.myArr 以某种方式被更改并用于该类的后续实例,这是怎么回事?
【问题讨论】:
标签: javascript arrays object lodash