【问题标题】:How to implement Proxy in ES5如何在 ES5 中实现代理
【发布时间】:2021-06-03 09:14:20
【问题描述】:

让我们有以下 sn-p:

var obj = {};
obj.doSomething = function(){
    console.log("Hello from obj");
}

我想为这个对象创建一个代理,并且每次调用来自obj 的任何方法时,执行其他操作,然后调用实际的obj 方法。 假设我希望代理打印消息“从对象 [object] 调用 [methodname]”

例子:

obj.doSomething();

输出:

Calling [doSomething] method from object [obj].
Hello from obj

如何在ES5中实现这个?

【问题讨论】:

    标签: javascript ecmascript-5


    【解决方案1】:

    我建议你检查this article about the try-catch proxy,根据自己的需要修改apply()之前的行以及ES5的语法

    【讨论】:

      【解决方案2】:

      您可以使用内置的 JavaScript 代理对象,如下所示:

      var obj = {};
      obj.doSomething = function(){
          console.log("Hello from obj");
      }
      
      const handler = {
        get: function(target, prop) {
          console.log(`Calling [${prop}] from object [${target}]`);
          target[prop]();
        }
      };
      
      const proxy = new Proxy(obj, handler);
      proxy.doSomething

      见:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy

      在 ES5 中它更复杂,但您可以执行以下操作:

      var obj = {};
      obj.doSomething = function(){
          console.log("Hello from obj");
      }
      
      
      
      
      function Proxy(target) {
        var handler = function(prop) {
          return function() {
            console.log("Calling [" + prop + "] from object [" + target + "]");
            target[prop]();
          }
        }
        
        var p = {};
        var keys = Object.keys(target);
        for(var i=0; i < keys.length; i++) {
          var key = keys[i];
          p[key] = handler(key);
        }
      
        return p;
      }
      
      
      var proxy = new Proxy(obj);
      proxy.doSomething()

      【讨论】:

      • ES5 不支持此功能
      猜你喜欢
      • 1970-01-01
      • 2017-11-07
      • 1970-01-01
      • 1970-01-01
      • 2015-10-05
      • 1970-01-01
      • 1970-01-01
      • 2021-07-16
      • 1970-01-01
      相关资源
      最近更新 更多