如何让2个Javascriptvariables在任何时候都相等?

我试图在脚本中实现node.js module.exportsexports规则。 这两个variables在任何时候都应该相等。 即使改变另一个也应该改变。

我试着用setter做这个,但是o.foo和o.bar都是undefined = /

 var foo = { hello: 'world' }; var o = { foo: foo, bar: foo }; var inuse = false; var setter = function(val) { if (inuse) return; inuse = true; o.foo = val; o.bar = val; inuse = false; }; o.__defineSetter__('foo', setter); o.__defineSetter__('bar', setter); o.foo = { hey: 'there' }; console.log(o.foo); console.log(o.bar); 

创buildgetter,并分配给不同的属性名称。

演示: http : //jsfiddle.net/jqExh/

 var foo = { hello: 'world' }; var o = { _foo: foo, _bar: foo }; var inuse = false; var setter = function(val) { if (inuse) return; inuse = true; this._foo = val; this._bar = val; inuse = false; }; o.__defineGetter__('foo',function(){return this._foo;}); o.__defineGetter__('bar',function(){return this._bar;}); o.__defineSetter__('foo', setter); o.__defineSetter__('bar', setter); o.foo = { hey: 'there' }; console.log( o.foo ); // Object console.log( o.bar ); // Object console.log( o.foo === o.bar ); // true console.log( o.foo.hey, o.bar.hey ); // there there 

或者使用variables而不是属性:

DEMO: http : //jsfiddle.net/jqExh/1/

 var o = (function() { var foo = { hello: 'world' }; var _foo = foo; var _bar = foo; var _o = {}; var inuse = false; var setter = function(val) { if (inuse) return; inuse = true; _foo = val; _bar = val; inuse = false; }; _o.__defineGetter__('foo',function(){return _foo;}); _o.__defineGetter__('bar',function(){return _bar;}); _o.__defineSetter__('foo', setter); _o.__defineSetter__('bar', setter); return _o; })(); o.foo = { hey: 'there' }; console.log( o.foo ); console.log( o.bar ); console.log( o.foo === o.bar ); // true console.log( o.foo.hey, o.bar.hey ); // there there 

这样,获取和设置它们的唯一方法就是通过访问器。