0

像“Obj”这样的全局对象被创建:

Obj = {     
   gtm : {},
   method: function(){console.log("Method is called");}
};

在其他一些地方Obj.method()使用。

我的问题是我能否以任何方式扩展“Obj”的代码以防止调用Obj.method(). 我不想重写或删除其他地方的代码,因为那将是很多变化。相反,我想更改原始代码,以便在某些情况下我不会调用该方法。

代理不是一个选项,因为代理会要求我更改其他地方的呼叫。并且代理在 IE 11 中不起作用。

我可以重写构造函数并实现我想要的吗?

谢谢并恭祝安康

4

2 回答 2

1
  1. 将函数复制到其他地方。
  2. 编写一个调用它的新函数。
  3. 将该函数分配给对象属性。

这样的:

(function () {
    // IIFE for scope so we don't create another global (`method` on the next line)
    const method = Obj.method;
    const new_method = function() {
        if (your_condition) {
            method();
        }
    };
    Obj.method = new_method;
})();

如果值this或任何参数很重要,您需要传递它们。

例如

method.apply(this, arguments);
于 2020-01-02T13:56:37.323 回答
0

我不完全确定你在找什么,但你说

“相反,我想更改原始代码,以便在某些条件下我不会调用该方法。”

那么为什么不做这样的事情:

Obj = {     
   gtm : {},
   method: function(){
      if (someCondition) return;
      // do rest of the method here
   }
};
于 2020-01-02T14:07:50.007 回答