如何设置对象(对象)的默认属性?

时间:2018-06-06 09:38:34

标签: javascript oop object

我需要在列表中添加新对象(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

1 个答案:

答案 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()会引用错误的对象,从而导致递归。