gpt4 book ai didi

javascript - 在 JavaScript 中返回私有(private)变量

转载 作者:行者123 更新时间:2023-11-30 08:56:45 24 4
gpt4 key购买 nike

我不知道为什么 console.log(Set.current_index) 显示 0 而不是 3

var Set = (function() {
var set = [];
var index = 0;

function contains(set, e) {
for (var i = 0; i < set.length; i++) {
if (set[i] === e) {
return true;
}
}
return false;
}

var add = function(e) {
if (!contains(set, e)) {
set[index++] = e;
}
}

var show = function() {
for (var i = 0; i < set.length; i++) {
console.log(set[i]);
}
}

return {
add: add,
show: show,
current_index: index
};
})();​

Set.add(20);
Set.add(30);
Set.add(40);
Set.show();
console.log(Set.current_index);

最佳答案

如所写,current_index 只是获取 indexinitial 值 - 它不会反射(reflect)对该值的任何更改,因为该变量是原始类型。

如果您有一个“引用类型”(即对象或数组),那么对其内容的更改在引用同一对象的任何其他变量中都是可见的。原始类型不会发生这种情况,它们会“按值”复制到新变量中,并且对原始变量的更改不会影响副本。

你需要把current_index做成一个返回index当前值的函数,或者写成getter 允许您通过不可见地调用函数返回当前值来将 .index 视为只读属性。

有关后一种方法的示例(需要 ES5 或垫片来复制功能),请参阅 http://jsfiddle.net/alnitak/WAwUg/ ,用这个替换你当前的 return block :

var interface = {
add: add,
show: show
};

Object.defineProperty(interface, 'index', {
get: function() {
return index;
},
enumerable: true
});

return interface;

关于javascript - 在 JavaScript 中返回私有(private)变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12993310/

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