在每个对象的调用中使用相同的function
我反对js
var myobj = {}
我需要每次你调用方法像myObj.a()
或myObj.b()
等方法,它会调用相同的function ,不会调用任何其他的东西… …
like myFn = function(){ return 1 + 1 ; }
好,所以代理是一种select。
这是ES6,我不相信它可以pollyfilled所以没有IE支持我害怕。 正如你所说那不是一个问题,那么一切都好。
var obj = {}; var objProxied = new Proxy(obj, { get: (target, key, reciever) => { console.log(`Handler hit, looking for prop ${key}`); return (...args) => foo(...args); // return what ever you like here } });
本质上,它是如何工作的,你提供的代理对象是“代理”和处理程序的地图。 MDN列出了所有不同的处理程序,如果你不提供处理程序,那么它会调用这个对象。
根据处理程序的types,您的处理程序提供了不同的东西。 在我们的例子中, get
获得被调用的对象,原始obj
和属性名称。
重要的是要注意你的处理器必须返回一个值(如果在这个例子中的注释),如果你不这样做,它会调用底层对象。 这会在我们的例子中导致一个exception,因为我们会尝试执行一个未定义的方法。
MDN
在行动:
var obj = {}; function foo(...args) { console.log('foo called With:', ...args); } var objProxied = new Proxy(obj, { get: (target, key, reciever) => { console.log(`Handler hit, looking for prop ${key}`); return (...args) => foo(...args) } }); objProxied.a(10); objProxied.b(20, 50);