0

这是我的模块:

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 中所做的那样。

在此先感谢您的帮助。

4

2 回答 2

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;
    }

};
于 2012-05-07T17:34:49.840 回答
0

问题是这一行MyModule

var str = strInput;

它应该是:

this.str = strInput;

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

于 2012-05-07T17:30:27.327 回答