模块模式中的构造函数参数

时间:2016-08-03 03:20:56

标签: javascript oop

有没有办法以与构造函数相同的方式将参数传递给模块?

我能找到的答案似乎暗示了一个setter函数。这对我来说不起作用,因为我的模块将具有依赖于所设置的全局变量的逻辑,并且如果没有使用依赖于" un-set&#34的代码实例化模块,则无法调用setter。 ;变量

具体来说,我正在尝试模块化' d3图通常很有用,并且希望能够使用数据数组参数来实例化模块。

编辑:对于d3图表,结果表明模块模式效果最好。没有什么需要用数据参数来实例化,这些参数不能在以后的更新函数中传递...

但一般来说,如果我有这个模块:

var thing = (function () {

var a = [1,2,3]; 
var l = a.length;

var doit = function () {
    console.log('your array has '+l+' elements');
}
var doit2 = function () {
    console.log('your array contains: '+a.toString());
}
return {
    doit: doit,
    doit2: doit2
  }
})();

如何传递数组代替var?

2 个答案:

答案 0 :(得分:2)

你可以这样做(注意IIFE退出):

var thingCreator = function (param) {
    // your code
    return {
        // your module object
    };
};

然后称之为:

var thing = thingCreator(a);

答案 1 :(得分:0)

<块引用>

如何传递一个数组来代替 var a?

我知道这个问题已经很老了,但我更愿意为可能需要将数据动态传递给模块模式的任何人提供答案。

简单地,在您的模块化函数中添加一个函数来动态更新 a 数组。

var thing = (function () {
  // default empty array
  var a; 
  // update
  var updateDynamically = function (array) {
    a = array;
  }
  // check for count
  var getCount = function () {
    return a.length;
  }
  return {
    updateDynamically,
    getCount
  }
})();

然后在运行时调用函数:

thing.updateDynamically([1,2,3]); // a is updated
thing.getCount(); // console >>> 3

请注意,这仅用于演示目的,您应该更新答案以匹配您尝试实现的过程。另请注意,此示例提供了更新/重置 a 数组的直接访问权限,在此简单示例的范围之外使用可能会很危险。