是否可以创建一个对象,该对象是另一个对象的子集,而不会丢失javascript中的引用

Is it possible to create an object that is a subset of another object without losing the references in javascript?

本文关键字:一个对象 引用 javascript 创建 对象 是否 子集      更新时间:2023-09-26

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

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

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

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

我尝试了很多方法,但都没有成功。我不确定语言是否支持这一点,但也许有人有一个聪明的方法来实现这一点。

好的。我对这个问题有一个很好的解决方案。所有的功劳都归功于@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'

超级傻瓜!!!