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 を 2 回使用して読者を混乱させないでください。とにかく、これは私がしたすべてです:

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 に答える