gpt4 book ai didi

JavaScript: 'Protected' 范围

转载 作者:行者123 更新时间:2023-11-28 06:01:34 26 4
gpt4 key购买 nike

如何在 JavaScript 中实现“ protected 变量”?

var DIM = {
makeOneDim: function(x) {
var magic = Math.random();
return {
dist: function() {
return x * magic;
}
};
},
makeTwoDim: function(x,y) {
var o = DIM.makeOneDim(x);
o.dist = function() {
magic *= Math.random();
return Math.sqrt(x*x+y*y) * magic;
// !! cant access 'private' variable magic !!
}
return o;
}
};
var o = DIM.makeOneDim(123);
var oo = DIM.makeTwoDim(1,2);
console.log(o.dist() + oo.dist());

我知道在这个例子中可以创建一个“公共(public) getter”,但我仍然想在 makeTwoDim 的范围内改变魔术变量并将其从实例中隐藏。

如果我能以某种方式阻止在每次创建实例时重新创建 dist 函数,那就太好了。

最佳答案

这符合您的需求吗?它使用揭示模块模式将magic设为私有(private)并返回函数。因此,无需从 makeTwoDim 调用 makeOneDim

var DIM = (function () {

var magic = Math.random();

function makeOneDim(x) {
return {
dist: function() {
return x * magic;
}
};
}

function makeTwoDim(x, y) {
return {
dist: function() {
magic *= Math.random();
return Math.sqrt(x * x + y * y) * magic;
}
}
}

return {
makeOneDim: makeOneDim,
makeTwoDim: makeTwoDim
}

});

var o = DIM().makeOneDim(123);
var oo = DIM().makeTwoDim(1,2);

DEMO

关于JavaScript: 'Protected' 范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37227832/

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