一种 getter 语法有效,但另一种无效?
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 语法有什么区别,我应该在什么时候使用它们?
后一个例子有 2 个问题:
您指的是不存在的变量x
:JS 不像 C++ 或 C# 或 Java 那样工作,您只需指定一个成员名称,但您必须使用this
参考地址。所以一定是this.x
修复 #1 后出现第二个问题:堆栈溢出。
Vector.prototype = {
get x() {
return this.x;
}
}
此代码定义了一个 getter,它访问自身以 return 一个值。这会导致 getter 被调用,以便它可以再次无限地调用自己。
它的解决方案是为数据成员本身及其 getter 使用不同的名称(如 this.x
与 this.x_
)
PS:准确地说"And this getter syntax doesn't work" --- 这不是语法问题,因为代码在语法上是正确的。问题出现在runtime,是代码逻辑的问题
为什么这个 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 语法有什么区别,我应该在什么时候使用它们?
后一个例子有 2 个问题:
您指的是不存在的变量
x
:JS 不像 C++ 或 C# 或 Java 那样工作,您只需指定一个成员名称,但您必须使用this
参考地址。所以一定是this.x
修复 #1 后出现第二个问题:堆栈溢出。
Vector.prototype = { get x() { return this.x; } }
此代码定义了一个 getter,它访问自身以 return 一个值。这会导致 getter 被调用,以便它可以再次无限地调用自己。
它的解决方案是为数据成员本身及其 getter 使用不同的名称(如
this.x
与this.x_
)
PS:准确地说"And this getter syntax doesn't work" --- 这不是语法问题,因为代码在语法上是正确的。问题出现在runtime,是代码逻辑的问题