我需要在列表中添加新对象(Filters.list)
* Filters.prop - 是默认的支柱
*列表项也有prop - list [name] .prop(等于默认道具)
Chage默认 Filters.prop - > [not]更改项列表[名称] .prop
错误在哪里?
function Filters() {
this.prop = 'some';
this.list = { };
this.add = function (name) {
this.list[name] = {
prop: this.prop,
};
}
}
let attempt = new Filters();
attempt.add('first');
attempt.prop = 'other';
document.writeln(attempt.prop);
document.writeln(attempt.list['first'].prop);
运行片段输出后:其他一些
但我需要:其他的
我认为该物业将通过参考保存。但事实并非如此,它并没有改变。当我更改 Filters.prop 时,我预计它也会改变 list [name] .prop
答案 0 :(得分:2)
这样做的问题在于,正如您自己注意到的那样,价值是按照您的方式而不是参考的方式传递的。
感谢JavaScript get,您可以在一个行为类似属性的函数中返回周围对象的prop
值。
function Filters() {
this.prop = 'some';
this.list = { };
this.add = function(name) {
let self = this;
this.list[name] = {
get prop() {
return self.prop;
},
};
}
}
let attempt = new Filters();
attempt.add('first');
attempt.prop = 'other';
document.writeln(attempt.prop)
document.writeln(attempt.list['first'].prop)

旁注:我在这里使用变量self
,因为在this.prop
中使用get prop()
会引用错误的对象,从而导致递归。