創建干將的歡迎,並分配給不同的屬性名稱。
DEMO: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
或者使用變量,而不是性質:
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
氏通過訪問器來獲取和設置它們的唯一方法。
我不明白。如果他們都必須「始終保持一致」,那麼爲什麼你需要兩個獨特的變量?只用一個。 – Sparky
我想知道同樣的事情。但我試圖模擬在虛擬機中加載模塊,所以我需要這樣做,因爲它是當前node.js模塊工作的方式。 – fent