私有成员(使用闭包),为什么初始化后添加的函数不能访问私有成员?
Javascript: Private Members (using closure), why can't functions added after initialization access private members?
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"
现在,这种行为可能是一件好事。但它打破了我对结束的直觉。匿名"私有函数和返回对象之间的链接不是吗?当我添加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
相关文章:
- 正在添加'X'按钮,在文本字段旁边使用javascript
- 如何在映射数组中添加换行符
- 正在将数据主题添加到所有项目
- ZeroClipboard-在复制之前添加到值
- 我可以在json对象中添加一个函数吗
- 我需要使用什么语法来向一个对象的成员添加一个临时数组,该成员等同于一个字符串的通用列表
- 何时向原型添加成员
- 使用JSON/JavaScript将成员添加到Office 365组
- 在 JavaScript 中,如何有条件地向对象添加成员
- 如何向对象添加函数并引用其成员
- 在原型中声明 TypeScript 成员,而不是添加到“this”中
- 为什么我不能将数组作为成员添加到我的对象中
- javascript将一个对象添加为另一个对象的成员
- JS对象:如何在添加属性时动态命名成员
- Javascript:在闭包中,私有成员(var)可以在实例化后添加吗
- 如何在highchart地图中添加2个成员
- 为什么把成员添加到构造函数而不是Prototype中?
- 私有成员(使用闭包),为什么初始化后添加的函数不能访问私有成员?
- 将行添加到用于成员的窗体中
- 向JSON添加新成员时出错