JavaScript模块模式:用户可实现的功能

时间:2018-07-09 12:25:29

标签: javascript design-patterns module iife

因此,我正在使用模块模式使用私有和公共方法以及属性创建自己的“ API”。到目前为止一切顺利。

但是:我想添加一个可由用户更改/实现的公共功能/挂钩。

但是,问题在于,当从模块内部调用函数时,它仍然知道先前的定义。如何确保不必使用模块内的变量名就能使用覆盖的定义?

var test = (function(){
    'use strict';
    var version = "1.7.0";

    var a = function(){
        console && console.log("Test");
        defineC();
        c();
    };

    var _b = function(){
        a();
    };

    var c = function(){
        //User implementable
    };

    return {
        version: version,
        a: a,
        c: c
    };
})();

function defineC(){
    test.c = function(){
        console && console.log("My own function");
    };
}

test.a();

1 个答案:

答案 0 :(得分:1)

您需要将覆盖函数作为IIFE的参数传递

喜欢

var test = (function(userFunction){
   'use strict';
   var version = "1.7.0";

   var a = function(){
        console.log("Test");
        c();
   };

   var _b = function(){
        a();
   };

   var c = userFunction;

   return {
        version: version,
        a: a,
        c: c
   };
})(defineC);

function defineC(){
   console.log("My own function");
}

test.a();

https://jsbin.com/vuwenesehu/edit?js,console