繁体   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