是否有可能创建一个对象作为另一个对象的子集而不会丢失javascript中的引用?

时间:2015-03-19 06:24:24

标签: javascript object

我在javascript中有一个对象,它有一堆我需要的数据。我希望能够创建第二个对象,其中包含来自第一个对象的数据子集,而不会丢失引用。例如:

var test1 = {foo: 'foo', bar: 'bar'};
var test2 = {foo: test1.foo};

不幸的是,以这种方式创建test2会丢失引用,test2.foo绑定到值'foo'而不是值'foo'的引用。这意味着属性foo不会在两个对象之间保持同步。

test1.foo = 'new value';
test2.foo; // <= 'foo'

我尝试了很多东西让这个工作没有运气。我不确定该语言是否支持这一点,但也许有人有一个聪明的方法来实现这一目标。

1 个答案:

答案 0 :(得分:1)

确定。我对这个问题有很好的解决方案。所有的功劳归功于@Alexei Levenkov,他提出了使用getter和setter的建议。

var test1 = {foo: 'foo', bar: 'bar'};
var test2 = {get foo(){return test1.foo;}, set foo(x){test1.foo = x;}};

通过使用getter和setter,test1.foo和test2.foo将保持同步。

test1.foo = 'new value';
test2.foo; // <= 'new value'
test2.foo = 'new new value';
test1.foo; // <= 'new new value'

Super duper !!!