使用构造函数显示模块模式

Kyl*_*bel 17 javascript revealing-module-pattern

我在确定实现这一目标的最佳方法时遇到了一些麻烦.

我想要一个带有构造函数的模块,该构造函数接受一个存储它的参数,以便以后在模块中使用.

var ModuleB = function(moduleA) {
    this.moduleA = moduleA;
}

ModuleB.prototype = function() {
    //private stuff/functions
    function someMethod() {
        moduleA.doSomething();
    }

    //public api
    return {
        someMethod : someMethod
    };
}();
Run Code Online (Sandbox Code Playgroud)

在其他一些文件中

//ModuleA defined elsewhere
var moduleA = new ModuleA();

//...

var module = new ModuleB(moduleA);
module.someMethod();
Run Code Online (Sandbox Code Playgroud)

现在上面someMethod,moduleA未定义,并且this是全局窗口对象.有人可以解释我如何访问moduleA吗?我不明白this.moduleA = moduleA;构造函数后会发生什么.我不是一个真正的javascript开发人员,所以如果我在这里或其他地方使用错误的模式,请随意加入.

jba*_*bey 10

你非常接近,但是在你的定义中你遗漏了一些重要的东西someMethod.

编辑:如果更改ModuleB中模块属性的名称,则更容易分辨哪些有效,哪些无效:

var ModuleA = function() {}

ModuleA.prototype = (function () {
    return {
        someMethod: function () {
            return 'foo';
        }
    };
}());

var ModuleB = function(moduleA) {
    this.innerModule = moduleA;
}

ModuleB.prototype = (function () {
    return {
        doStuff: function () {
            return this.innerModule.someMethod();
        }
    };
}());

var moduleA = new ModuleA();

var moduleB = new ModuleB(moduleA);
console.log(moduleB.doStuff()); // prints "foo"
Run Code Online (Sandbox Code Playgroud)

http://jsfiddle.net/mN8ae/1/

  • 原型上的函数应始终将`this`指向调用对象 (2认同)