【问题标题】:use same function in every call of object在每次调用对象时使用相同的函数
【发布时间】:2016-10-31 14:20:50
【问题描述】:

js中的对象

var myobj = {} 

每次你调用像myObj.a()这样的方法时,我都需要它 或myObj.b() 等它会调用相同的函数,并且根本不会调用其他任何东西......

like myFn = function(){
return 1 + 1 ;
} 

【问题讨论】:

  • 你为什么要这么做?
  • proxy 非常适合。
  • @ste2425 - 你能举个例子吗
  • @shopia 等一下,
  • @ste2425,IE还不支持Proxy吗?

标签: javascript node.js ecmascript-6


【解决方案1】:

好的,代理是一种选择。

它是 ES6,我不相信它可以填充,所以我害怕没有 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 列出了所有不同的处理程序,如果您不提供处理程序,那么它将调用对象。

根据处理程序的类型,您的处理程序会提供不同的东西。在我们的例子中,get 接收它被调用的对象、原始的 obj 和属性名称。

请务必注意,您的处理程序必须返回一个值(示例中的注释所在的位置),否则它将调用底层对象。这会在我们的示例中导致异常,因为我们会尝试执行未定义的方法。

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);

【讨论】:

  • 感谢您提出了一个出色的 ES6 解决方案!
  • 为什么不用栈 sn-p 而不是 jsfiddle?
  • @FelixKling 因为我更喜欢 JSFiddle 进行原型设计,所以它已经在我的浏览器中打开了,老实说,我不完全确定如何在 SO 中添加一个。
  • 完成 :) 非常简单:点击“插入 sn-p 按钮”,粘贴代码,点击“保存并插入帖子”即可完成!我同意jsfiddle在编写代码时更方便。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-15
  • 1970-01-01
  • 2015-03-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多