这是我的模块:
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中一样,当我在同一个类中构建一个新类时。
提前感谢您的帮助。
答案 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
将始终指向同一个变量,并且具有最后设置的值。