一种getter语法有效,但另一种无效;t
One getter syntax works, but the other doesn't?
为什么这个getter语法在没有Object.defineProperty
的情况下工作?
var Vector = function(x, y) {
this.x = x;
this.y = y;
}
Vector.prototype = {
getX: function() {
return this.x;
}
}
var vector = new Vector(22, 1);
vector.x = 3;
alert(vector.getX());
这个getter语法不起作用(在JSFiddle和CodePen中)?
var Vector = function(x, y) {
this.x = x;
this.y = y;
}
Vector.prototype = {
get x() {
return x;
}
}
alert(new Vector(3, 4).x);
这些getter语法之间的区别是什么?我应该在什么时候使用它们?
后一个例子有两个问题:
-
您引用的是不存在的变量
x
:JS不像C++、C#或Java那样只指定成员名称,但必须使用this
引用来寻址。因此它必须是this.x
-
当您修复#1时,会出现第二个问题:堆栈溢出。
Vector.prototype = { get x() { return this.x; } }
这段代码定义了一个getter,它访问自己以返回一个值。这导致getter被调用,这样它就可以无限地再次调用自己。
它的解决方案是为数据成员本身及其getter使用不同的名称(如
this.x
和this.x_
)
PS:准确地说,"这个getter语法不起作用"——这不是语法问题,因为代码在语法上是正确的。该问题出现在运行时,是代码逻辑的问题。
相关文章:
- Windows8应用程序(html&Javascript):从图片库(除了文件选择器)显示图像的另一种方式
- jQuery:使用substr()的另一种方法
- 另一种显示和隐藏按钮的方式
- 单击()的另一种方式
- 解析一个复杂的JavaScript表达式,将其改写为另一种格式
- parseJSON在一种情况下有效,而在另一种情况中无效
- 如何访问对象's成员通过另一种方法填充的方法
- 是否可以在网页上用另一种字体设置jqmath-display的样式
- 用于自动将一种类型的URL更改为另一种类型
- 将日期字符串转换为另一种语言
- Rails 以一种方式格式化 DateTime.now 和 DateTime.yesterday 另一种方式 - 我如何
- 通过javascript将带有日期的字符串格式化为另一种格式
- 输入文本是't在一种情况下以相同的形式更新与另一种情况相同的角度模型
- 将JSON从一种格式转换为另一种格式
- 另一种方式是Javascript中的函数堆叠
- require.js是require的另一种方式
- 如何获得一种颜色的rgb值'It’它接近另一种颜色
- 一种getter语法有效,但另一种无效;t
- 用jquery预处理html的一种方法有效,但为什么另一种方法无效't
- 控制器之间共享服务的脏检查,一种方法有效,另一种方法无效