【问题标题】:Javascript setter and getter return different outputsJavascript setter 和 getter 返回不同的输出
【发布时间】:2014-05-07 10:24:51
【问题描述】:

我一直在使用关键字 get 和 set 的 JavaScript,但我认为我没有正确实现它。

_maxWinnings: -1,
get maxWinnings() { 
    return this._maxWinnings;
}, 
setMaxWinnings : function( value ) {
    this._maxWinnings = value;
    // This works fine.
    // this.maxWinnings = value;
}

我做了一系列测试,结果并不如预期。

console.log( this.sgd._maxWinnings );
> -1
console.log( this.sgd.maxWinnings );
> -1
console.log( this.sgd.setMaxWinnings(10) );
> undefined
console.log( this.sgd._maxWinnings );
> 10
console.log( this.sgd.maxWinnings );
> -1

希望你能帮帮我。

【问题讨论】:

  • 我无法复制您的问题:Fiddle

标签: javascript getter


【解决方案1】:
setMaxWinnings : function( value ) {
    // This works fine:
    // this.maxWinnings = value;
}

不,它没有。您已经编写了一个需要调用的 setter 方法(例如 sgd.setMaxWinnings(10)),但是如果您想要一个属性赋值 setter,那么您将需要使用

set maxWinnings( value ) {
    this._maxWinnings = value;
}

【讨论】:

    【解决方案2】:

    get 和 set 关键字不能这样工作。

    function SGD()
    {
        this._maxWinnings = 0;
        return this;
    }
    Object.defineProperty(SGD, 'maxWinnings', {
        get : function () { return this._maxWinnings; },
        set : function (val) { this._maxWinnings = val; }
    });
    
    var sgd = new SGD();
    sgd.maxWinnings = 100;
    alert(sgd.maxWinnings.toString());
    

    https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperty

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多