如何在对象中覆盖JavaScript IIFE返回的方法?

时间:2018-07-19 15:52:44

标签: javascript inheritance prototypal-inheritance

我有一个IIFE内容,看起来像这样:

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

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

我想在执行此method2时以某种方式在另一个javascript对象中覆盖此method1,然后它将调用覆盖的method1,而不是此原始method1。预先感谢。

2 个答案:

答案 0 :(得分:1)

如果我了解您的要求,则可以将method2(在您的API对象中)的值设置为覆盖的方法(在此示例中为B的{​​{1}} )。由于method1是使用IIFE创建的,因此必须在A之前声明包含重写方法的对象,否则您将收到引用错误。

A

答案 1 :(得分:0)

您将需要使用原型才能以所需的方式完成此操作。看下面的例子。

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