JavaScript 枚举示例 - 这是如何工作的?

标签 javascript enums closures

这段代码来自this answer .

我试图理解它是如何工作的,但我并没有完全理解。

我认为正在发生的是 TEST_ERROR 是一个闭包,因此 ErrorValue 无法更改。人们会引用这样的值:TEST_ERROR.SUCCESS。如果其中任何一个陈述不正确,请纠正我。

我不明白的是 return 语句是做什么的。它正在返回一个由不同的 ErrorValues 组成的对象,但它返回什么?它从什么返回?什么时候调用?

var TEST_ERROR = (function() {
  function ErrorValue(value, friendly) {
    this.value = value;
    this.friendly = friendly;
  }
  ErrorValue.prototype = {
    toString: function() { return this.friendly; },
    valueOf: function() { return this.value; }
  };
  return {
    'SUCCESS': new ErrorValue(0, 'Success'),
    'FAIL': new ErrorValue(1, 'Fail'),
    'ID_ERROR': new ErrorValue(2, 'ID error')
  };
})(); 

谢谢!

保罗

最佳答案

TEST_ERROR is a closure so ErrorValue can't be changed.

TEST_ERROR 最终将只是匿名函数内 return 语句中指定的对象。 此对象可以更改。

One would reference a value like this: TEST_ERROR.SUCCESS

没错。

What I don't understand is what the return statement is doing. It's returning an object made up of different ErrorValues, but returning it to what? And what is it returning from? And when is it being called?

return 语句从 anonymous function 返回声明为

(function() { ...})();

最后的()表示匿名函数声明后立即被调用,返回中的值 block 分配给 TEST_ERROR

Here这是一篇关于闭包和模拟私有(private)变量的好文章,可能会有用。

关于JavaScript 枚举示例 - 这是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4503850/

相关文章:

.net - .NET 中属性的限制值

c++ - 翻译枚举值 Qt 的字符串表示形式

python - 为什么 exec 中的闭包会被破坏?

Objective-C 代码的 Swift 3 闭包语法

javascript - 如何将闭包转换为 promise

Javascript 动画循环不会停止

javascript - 如何获取有关随机智能合约地址的数据。例如创建日期、链、持有者(持有多少个钱包)

Swift:枚举中元素的索引(CaseIterable)

javascript - JavaScript 闭包是如何工作的?

javascript - 上传图片后如何添加类?