javascript中模块2内的新模块

时间:2012-05-07 17:24:57

标签: javascript

这是我的模块:

MyModule = (function () {

    var myModule = function MyModule(strInput) {
        if (false === (this instanceof MyModule)) {
            return new MyModule();
        }

       var str = strInput;
       this.getStr = function () {
           return str;
       }

       this.test = function () {
           var testModule = new MyModule("testInside");
           return testModule;
       }

   }

    return myModule;    
}());

以下是我测试模块的方法:

document.getElementById("Button").onclick = function () {
    var module = new MyModule("input");
    var module2 = module.test();

    console.log(module2.getStr());
    console.log(module.getStr());
}

此代码返回:

testInside   
testInside

到console.log,但我期望的是:

testInside    
input  

就像我在c#或java中一样,当我在同一个类中构建一个新类时。

提前感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

我不知道我到底做了什么,只是侥幸得到了它。但请不要两次使用MyModule来混淆读者。无论如何,这就是我所做的一切:

MyModule = (function() {

    return function M(strInput) {
        if (false === (this instanceof M)) {
            return new M();
        }

        var str = strInput;
        this.getStr = function() {
            return str;
        }

        this.test = function() {
            var testModule = new M("testInside");
            return testModule;
        }

    }
}());
// while testing.
var module = new MyModule("input");
var module2 = module.test();

console.log(module2.getStr());
console.log(module.getStr());

<强>更新 有一个更简单的解决方案。我只是复制粘贴编辑你的代码所以没有太大的变化。这是最简单的一个:

MyModule = function(strInput) {
    if (false === (this instanceof MyModule)) {
        return new MyModule();
    }

    var str = strInput;
    this.getStr = function() {
        return str;
    }

    this.test = function() {
        var testModule = new MyModule("testInside");
        return testModule;
    }

};

答案 1 :(得分:0)

问题在于MyModule

中的这一行
var str = strInput;

应该是:

this.str = strInput;

因为否则str将始终指向同一个变量,并且具有最后设置的值。