[英]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
});
get
和set
语法...定义一个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.