Javascript 一种getter语法有效,但另一种不起作用';T

Javascript 一种getter语法有效,但另一种不起作用';T,javascript,getter,Javascript,Getter,这个getter语法在没有对象的情况下如何工作。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语法在没有
对象的情况下如何工作。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中)


这些getter语法之间有什么区别?我应该在什么时候使用它们?

后一个示例有两个问题:

<> >你指的是不存在的变量<代码> x>代码>:JS不工作,如C++或C语言或java,在这里你只指定一个成员名称,但是你必须使用<代码>这个< /Cord>参考来处理它。所以它必须是
this.x

  • 修复#1时,会出现第二个问题:堆栈溢出

    Vector.prototype = {
        get x() {
            return this.x;
        }
    }
    
    此代码定义一个getter,该getter访问自身以返回值。这会导致调用getter,以便它可以再次无限地调用自己

    它的解决方案是为数据成员本身及其getter使用不同的名称(比如
    this.x
    vs
    this.x


  • PS:准确地说,“这个getter语法不起作用”——这不是语法问题,因为代码在语法上是正确的。这个问题出现在运行时,是代码逻辑的问题。

    在第一个示例中,您定义了一个以get开头的函数。这并不意味着这是一个好消息getter@JaromandaX--第一个示例的语法似乎在这个人的答案中被用作getter?
    Vector.prototype = {
        get x() {
            return this.x;
        }
    }