用代理对象实现「伪指针」

Belleve Invis · 2013-11-26

我在《On Harmony》中提及的代理对象远远比想象中的强大,比如说……你可以实现「指向对象特定属性的指针」。

下面是代码:

var PointerToProperty = function(base, name){
		return new Proxy({}, {
			get : function(...args) { return Reflect.get(base[name], ...args) },
			set : function(...args) { return Reflect.set(base[name], ...args) },
			// 其余方法类似
			apply : function(...args) { return base[name].apply(...args) },
			construct : function(args) { return new (base[name])(...args) }
		})
	}
	

用例

var obj = {}
	var f = PointerToProperty(obj, 'method');
	obj.method = function(){ return 1 };
	f() // = 1
	obj.method = function(){ return 2 };
	f() // = 2