gpt4 book ai didi

javascript - 闭包在对象之间共享变量

转载 作者:行者123 更新时间:2023-12-02 15:25:41 24 4
gpt4 key购买 nike

我正在尝试实现一个愚蠢的代码,一个具有“私有(private)”成员(闭包变量)的基本对象,以及基于该对象的两个对象。看来两个对象操作相同的闭包变量

Obj = (function(){

var count = 0;

function getCount(){
return count;
}

function setCount(c) {
count = c;
}

return {
getCount : getCount,
setCount : setCount
}

}());

obj1 = Object.create(Obj);
obj2 = Object.create(Obj);

obj1.setCount(10);
obj2.getCount(); // 10? that's.. not so good

所以,我原来的 Obj 代码只执行一次,这在某种程度上解释了这一点。

我的问题:

在从闭包中创建多个对象时,有什么方法可以保留“私有(private)”变量吗?我找不到任何聪明的解决方法,并且我希望避免将该变量设置为可公开访问。

最佳答案

这就是你所拥有的

+-------+\
| obj1 | \
+-------+ \ +-------+---getCount---\
| Obj | var count
+-------+ / +-------+---setCount---/
| obj2 | /
+-------+/

这两个对象共享一个共同的原型(prototype) Obj,它有两个访问相同 count 变量的方法。

您想要的是有两个单独的 count 变量和一个单独的 Obj,每个变量都有自己的方法来关闭 count

为此,只需将 IIFE 函数转换为命名函数,然后放弃 Object.create

function Obj(){

var count = 0;

function getCount(){
return count;
}

function setCount(c) {
count = c;
}

return {
getCount : getCount,
setCount : setCount
}
}

obj1 = Obj();
obj2 = Obj();

obj1.setCount(10);
obj2.getCount(); // 0

现在你有这个:

+-------+---getCount---\
| obj1 | var count
+-------+---setCount---/

+-------+---getCount---\
| obj2 | var count
+-------+---setCount---/

关于javascript - 闭包在对象之间共享变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33714493/

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