代码之家  ›  专栏  ›  技术社区  ›  user81993

是否有方法重写js对象属性检索?

  •  0
  • user81993  · 技术社区  · 7 年前

    我需要自动分析函数并确定每个函数使用对象的哪些属性。

    函数非常简单,例如

    (a, b) => Math.min(100, 50 + a.strength, 50 + b.strength)
    

    输入对象的所有属性都是数字,并且函数不会对输入对象进行任何更改

    我的第一个想法是分析函数的字符串形式,但为了使它更简单,如果我可以使用测试虚拟对象运行每个函数,这些对象动态地传递任何名称的请求属性并记录该名称,那将是完美的。

    例如,在vb.net中,可以为类定义一个默认属性,以便可以基于键值动态处理每个对象(键)访问。js中有类似的东西吗?

    1 回复  |  直到 7 年前
        1
  •  2
  •   Blue    7 年前

    你可以用 proxies 并将它们传递给函数,并记录调用的属性:

    const fn = (a, b) => Math.min(100, 50 + a.strength, 50 + b.strength)
    
    var aProxy = new Proxy({}, {
      get: (obj, prop) => console.log(`${prop} was called on a`)
    });
    
    var bProxy = new Proxy({}, {
      get: (obj, prop) => console.log(`${prop} was called on b`)
    });
    
    fn(aProxy, bProxy);