我花了一点时间阅读才明白它的用法,所以虽然 @RGraham 指向了一段好的文档 (
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/get),但我想提供一个使用示例。
基本上, "get" 和 "set" 运算符允许您覆盖直接访问成员变量时获取的行为。
这意味着您可以,例如:
- 以一个名称公开地呈现一个成员变量,然后将其私下存储为另一个名称。
- 存储之前对值执行操作。
- 呈现一个看起来像成员变量而实际上是函数的东西。
当然,所有这些都可以通过在对象上定义函数来完成,区别在于函数必须被称为这样。
使用这种记号时,即使记号似乎引用成员变量,也会调用函数。
就个人而言,我不喜欢它 - 我认为它可能会导致一些非常令人困惑的代码,特别是在调试时。但如果您想要使用它,那么它就在那里...
示例
var Field = {
get value(){
return this._value;
},
set value(val){
this._value = val + 1;
}
};
Field.value = 100
console.log( Field.value );
将输出:
101
这里有一个示例: http://jsfiddle.net/zV8Kf/1/
接下来是关于“为什么{ get foo(){} }
是合法的?”问题:
我的理解是:
- 创建一个对象
- 定义一个无操作的函数
- 把该函数分配给'foo'作为getter
这意味着对于该对象的foo引用将返回undefined
您可以在此处查看行为:
http://jsfiddle.net/VHAhA/
如果您认为get
近似于foo: function
(我知道它不完全如此,但它确实说明了“我要定义一个函数-将其分配给this”),那么它在语法上类似于:
{ foo: function foo() {} }
它不能与{ foo(){} }
进行比较,因为在这个例子中,您没有告诉JavaScript您将要定义什么,也没有告诉它在定义之后把它放到哪里。
get
和set
都在MDN的运算符文档中列出。https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/get。它们也被称为getter和setter。我猜它们类似于`delete`/`typeof`/`yield`运算符。 - CodingIntrigue