【问题标题】:How to override a javascript IIFE returned method in an object?如何覆盖对象中的 javascript IIFE 返回方法?
【发布时间】:2018-07-19 15:52:43
【问题描述】:

我有一个 IIFE 内容,如下所示:

var A = (function() { 
     var method1 = function() { 
         alert("PARENT METHOD");
     }
     var method2 = function() {
        method1();
     }

    return {
        method1: method1,
        method2: method2
    }
})();

我想在另一个javascript对象中覆盖这个method1,当这个method2执行时,它会调用被覆盖的method1,而不是这个原始的method1。提前致谢。

【问题讨论】:

  • 由于闭包和 method2 直接引用 method1 变量,您将无法更改 method2 正在调用的内容。请稍等片刻,我将举一个简单的例子来说明你如何做到这一点。
  • @AdamH 我可以更改这些对象的基本结构,但它也必须遵循编码标准。还是谢谢。
  • 看看我刚刚添加的答案,这就是你将如何做到这一点。编码标准因商店而异,那么您尝试遵守哪些编码标准?

标签: javascript inheritance prototypal-inheritance


【解决方案1】:

如果我理解您的要求,那么您可以将 method2(在您的 API 对象中)的值设置为被覆盖的方法(在此示例中为 Bmethod1)。由于A 是使用IIFE 创建的,所以包含被覆盖方法的对象必须在A 之前声明,否则会出现引用错误。

var B = {
  method1: function() {
    console.log('This is method2 in B!');
  }
}

var A = (function() {
  var method1 = function() {
    alert("PARENT METHOD");
  }
  var method2 = function() {
    method1();
  }

  return {
    method1: method1,
    method2: B.method1
  }
})();


//call A.method2
A.method2();

【讨论】:

    【解决方案2】:

    您将需要使用原型才能以您希望的方式完成此任务。看看下面的例子。

    var A = (function() { 
    		 var api = function(){}
         
         api.prototype.method1 = function() { 
             console.log("PARENT METHOD");
         }
         
         api.prototype.method2 = function() {
            this.method1();
         }
    
        return new api();
    })();
    
    A.method2();
    A.method1 = function() { console.log('child method');}
    A.method2();

    【讨论】:

    • @suchit 很高兴我能帮上忙。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-16
    • 2014-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多