Javascript:内部数组未重置为外部对象

标签 javascript oop scope

如何以正确的方式授予对对象内部属性的访问权限?这就是破坏我的应用程序的原因:

我有一个处理数组的对象(此处简化):

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 设置的是 var list 的值,而不是从 ListManager() 返回的对象上的 .list 。您可以使用this来代替:

function ListManager() {
    var list = [],
        add = function (element) {
            this.list.push(element);
        },
        clear = function () {
            this.list = [];
        };

    return {
        add: add,
        clear: clear,
        list : list
    };
}

关于Javascript:内部数组未重置为外部对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23944325/

相关文章:

javascript - 添加 flaglike 挥舞到 2d 上下文

javascript - AngularJS RequireJS 加载 Angular 文件上传

javascript - data.key 未定义 : how to parse json data

c# - 如何强制所有实现在其构造函数中调用特定方法

objective-c - 声明 Objective C 对象时哪个更有效

Ruby 从模块导入局部变量

javascript - 从包含字母数字的命名空间读取 JSON 时出错

oop - 我应该如何组织一堆单独使用的功能?

ruby-on-rails - Rails 3 中的作用域与类方法

python - 如何在 Python 的初始化程序中访问类变量?