gpt4 book ai didi

Javascript:私有(private)成员(使用闭包),为什么初始化后添加的函数不能访问私有(private)成员?

转载 作者:行者123 更新时间:2023-12-02 17:23:47 29 4
gpt4 key购买 nike

 test = (function(){var key = 200; 
return {getKey : function(){return key} };
})();

test.getKey() //returns 200, so far so good

test.setKey() = function(arg){key = arg};

test.setKey(400);

test.getKey() //still returns 200, setKey cannot access the private member "key"

现在,这种行为可能是一件好事。但这打破了我对闭包如何工作的直觉。匿名“private函数和返回对象之间不是有联系吗?当我添加setKey时,它不是返回对象(测试)的一部分吗?

预先感谢您提供的任何帮助。

最佳答案

这样想:闭包是对当前作用域链的引用。只有引用相同作用域的内容才会修改相同的变量。此部分是 key 变量存在的范围:

{var key = 200; 
return {getKey : function(){return key} };
}

您的 set 函数是在此范围之外定义的,因此会修改名为 key 的不同变量。闭包和作用域不与对象相关。如果您希望稍后能够添加 set 函数,则需要使变量成为对象的实际成员:

test = (function(){
return {key: 200, getKey : function(){return this.key} };
})();

test.getKey() //returns 200, so far so good

test.setKey = function(arg){this.key = arg};

test.setKey(400);

test.getKey() //returns 400

关于Javascript:私有(private)成员(使用闭包),为什么初始化后添加的函数不能访问私有(private)成员?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23677972/

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