Google Apps Script - это интересный диалект JavaScript, поскольку он очень устарел (хотя я понимаю, что это будет исправлено), и в то же время содержит в себе странное знание современных вещей.
Есть несколько старых способов сделать то, что вы пытаетесь сделать, надеюсь, один из них работает в GAS:
Object.defineProperty
Это все еще современный, но был добавлен долго достаточно, чтобы go ГАЗ мог иметь его: Используя 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
свойство вроде этого, вы хотите быть уверены, что определите свойство constructor
, как показано выше (оно определяется таким образом по умолчанию в объекте, который вы получаете автоматически, но если вы его заменяете, естественно, оно не предоставляется автоматически при замене).
ДЕЙСТВИТЕЛЬНО Старый Путь
Я сомневаюсь, что ГАЗ поддерживает это, но на всякий случай, действительно старый способ сделать это использует __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, но это было на диалекте JavaScript от Mozilla в течение многих лет (и, вероятно, все еще для обратной совместимости).