[英]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.