JavaScript: 'Protected' 范围

标签 javascript scope

如何在 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/

相关文章:

javascript - 更新 Angular forEach 内部的外部变量

javascript - 如何让JS脚本使用某些变量

c++ - 在多个 Cpp 文件中使用一个变量

date - 如何在 JavaScript 中将日期从 dd mon yyyy 拆分为 dd mon?

javascript - 获取快照元素的数量

像 stopPropagation() 这样的 javascript 函数

javascript - 在 while 循环内声明变量 javascript

c - 如何访问 C 中的阴影全局变量?

javascript - 创建元素并独立滚动它们

javascript - Nativescript-Drop-Down 在 javascript 中获取值