gpt4 book ai didi

module-pattern - 创建模块的多个实例

转载 作者:可可西里 更新时间:2023-11-01 01:31:14 26 4
gpt4 key购买 nike

我以为我已经开始很好地理解 JavaScript,但显然不是。让我用一个例子来解释我的问题。首先,我定义了以下模块:

var Test = function() {
var counter = 0;

function init() {
alert(counter);
}

return {
counter: counter,
init: init
}
};

然后我创建了 2 个实例:

var test1 = new Test();
var test2 = new Test();

现在我更新计数器变量(因为它是公共(public)的)并发出一些警报。到目前为止一切顺利。

alert(test1.counter); // Alerts 0
test1.counter = 5;
alert(test2.counter); // Alerts 0
test2.counter = 10;
alert(test1.counter); // Alerts 5

现在我终于说了以下几点:

test1.init(); // Alerts 0
test2.init(); // Alerts 0

这是我不明白的地方。为什么此警报为 0?我以为第一个警报是 5,第二个警报是 10。

如果有人能解释以上内容的工作原理或为我指明正确的方向,我将不胜感激。谢谢

最佳答案

保持 0 是因为您没有更改 Test 中的变量,您正在更改函数返回的对象。 counter 保持“私有(private)”状态,只有 Test 中的函数可以访问它。

var Test = function() {
var counter= 0;

function init() {
alert(counter);
}
function changeNum(n){
counter = n; //add a function inside `Test` so that it can
} //access the variable

return {
counter: counter,
init: init,
changeNum: changeNum
}
};

现在它可以工作了:http://jsfiddle.net/DerekL/pP284/

var test1 = new Test();
alert(test1.counter); //0
test1.init(); //0
test1.changeNum(5);
alert(test1.counter); //5
test1.init(); //5

有关详细信息,请参阅 JavaScript Closures .

关于module-pattern - 创建模块的多个实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14792211/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com