簡體   English   中英

如何在 GAS 的 javascript 的 class 中定義 setter 和 getter

[英]how to define setter and getter in a class in javascript in GAS

我正在使用 ES5 javascript 的 GAS(Google Apps 腳本)。

我定義了一個 class 如下:

var Test = function(a){
  this._a = a;
}

Test.prototype.doSomething = function(){
  //do something here
}

然后,我想以與定義 Test.prototype.doSomething 相同的方式為this._a添加 setter 和 getter。

我在此鏈接中找到了定義 setter 和 getter 的代碼:

var o = {
    a: 7,
    get b() {
        return this.a + 1;
    },
    set c(x) {
        this.a = x / 2
    }
};

但是,我不知道如何將這種方式應用於我的案例。

你能告訴我怎么做嗎? 提前致謝。

Google Apps 腳本是 JavaScript 的一種有趣的方言,因為它既非常過時(盡管我知道這將得到修復),但其中包含一些奇怪的現代事物。

有幾種較舊的方法可以做您想做的事情,希望其中一種適用於 GAS:

Object.defineProperty

這仍然是現代的,但很久以前就添加了 GAS 可能有它:使用Object.defineProperty ,如下所示:

var Test = function(a){
    this._a = a;
};

Test.prototype.doSomething = function(){
    //do something here
};

Object.defineProperty(Test.prototype, "a", {
    get: function() {
        return this._a;
    },
    set: function(value) {
        this._a = value;
    },
    configurable: true
});

使用getset語法

...定義一個getter和一個setter ,就像你在問題中的例子一樣。

var Test = function(a){
    this._a = a;
};

Test.prototype = {
    constructor: Test,
    doSomething: function(){
      //do something here
    },
    get a() {
        return this._a;
    },
    set a(value) {
        this._a = a;
    }
};

請注意,當您像這樣在prototype屬性上完全替換 object 時,您要確保定義如上所示的constructor屬性(默認情況下在 object 中以這種方式定義,您會自動獲得,但如果您替換它,自然是不會自動提供更換)。

真正的老路

我懷疑 GAS 是否支持它,但以防萬一,真正古老的方法是使用__defineGetter____defineSetter__ ,如下所示:

var Test = function(a){
    this._a = a;
};

Test.prototype.doSomething = function(){
    //do something here
};

Test.prototype.__defineGetter__("a", function() {
    return this._a;
});
Test.prototype.__defineSetter__("a", function(value) {
    this._a = value;
});

這從未正式成為 ECMAScript 的一部分,但多年來一直是 Mozilla 的 JavaScript 方言(為了向后兼容,可能仍然如此)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM