【发布时间】:2014-05-29 22:54:01
【问题描述】:
如何以正确的方式授予对对象内部属性的访问权限?这就是破坏我的应用程序的原因:
我有一个处理数组的对象(这里简化了):
function ListManager() {
var list = [],
add = function (element) {
list.push(element);
},
clear = function () {
list = [];
};
return {
add: add,
clear: clear,
list : list
};
};
但是我在使用它时得到了这个:
var manager = new ListManager();
manager.add("something");
manager.clear();
console.log(manager.list.length); // <= outputs "1"!
单步执行代码显示,在 clear 方法中,list 变成了一个新数组。但是从ListManager 之外的列表没有被清除。
我做错了什么?
【问题讨论】:
-
你需要在 clear 方法中使用
this.list。 -
在返回列表属性的列表时,我认为它传递的是值而不是引用,这就是你得到的值!!
-
确实是按引用/按值的问题。
-
把这个标记为 dup 的你们对什么是重复有一种奇怪的感觉。仅仅因为在另一个答案中讨论了此解决方案中涉及的概念并不足以使其重复。这里的答案更有价值,因为它们为这个问题提供了具体的解决方案,而你标记为重复的那个没有。根据我们的定义,今天提出的几乎每一个问题都应该与某事重复,因为当您了解今天所有问题的根源时,可能很少有以前没有讨论过的实际新问题。
-
最重要的是,您选择重复的问题是关于将参数传递给与该问题的解决方案无关的函数 - 这个问题涉及对分配的错误理解,而不是将参数传递给函数。我正在投票重新开放。
标签: javascript oop scope