javascript - Subklasser och arv i Google App Script
Har någon några mönster för att skriva och subklassa objekt i Google Apps Script?
Jag har försökt definiera underklasser med ParentClass.call(this, args), och att lägga föräldraklassens metoder både i den ursprungliga definitionen av föräldern och genom att tilldela dem till ParentClass.prototype. Men medan denna kod klarar enhetstester, misslyckas den när den används i Google Apps Script.
Svar #1
det handlar om att utöka klass (men javascript har ingen riktig 'klass'). du kan använda Prototype.js eller mootool.js eller göra så här?
function Human () {
this.init.apply ( this, arguments );
}
Human.prototype = {
init: function () {
var optns = arguments[0] || {};
this.age = optns.age || 0;
this.name = optns.name || "nameless";
},
getName : function () {
return this.name;
},
getAge : function () {
return this.age;
}
}
function Man () {
this.init.apply ( this, arguments );
}
Man.prototype = {
init : function () {
Human.prototype.init.apply (this, arguments);
this.sex = "man";
},
getName : Human.prototype.getName,
getAge : Human.prototype.getAge,
getSex : function () {
return this.sex;
}
}
function Woman () {
this.init.apply ( this, arguments );
}
Woman.prototype = {
init : function () {
Human.prototype.init.apply (this, arguments);
this.sex = "woman";
},
getName : Human.prototype.getName,
getAge : Human.prototype.getAge,
getSex : Man.prototype.getSex
}
var human = new Human({age:60,name:"Tom Tomas"}),
man1 = new Man({age:30,name:"Wood Tomas"}),
woman1 = new Woman({age:19,name:"Mary Tomas"});
console.log( human.getName() );
console.log( man1.getName() );
console.log( woman1.getName() );
console.log( human.getAge() );
console.log( man1.getAge() );
console.log( woman1.getAge() );
console.log( human.getSex && human.getSex() );
console.log( man1.getSex() );
console.log( woman1.getSex() );
eller så kan du använda jQuerys $.extend för att göra detta. hoppas det kan hjälpa!
Svar #2
Fel: ReferenceError: <class> är inte definierad
Om din kod är korrekt och det fortfarande inte fungerar på Google Script-plattformen (får undantaget ovan), försök att sortera filen. Ja, verkligen, sortera den.
Men även efter sortering, om det ger felet 'ReferenceError: <class> is not defined', försök att ordna filen manuellt. Se till att filen med den odefinierade klassen utvärderas först genom att byta namn på filen.
001_Animal.gs < odefinierad klass
002_Rabbit.gs
003_Main.gs
Mer information om detta problem finns här.
Jag hade ett skript utan kodfel, och det fungerade inte. Jag använde också @Valentins kod, det fungerade inte heller. Allt jag behövde göra var att sortera. Efter det fungerade det.
Jag använder @Valentins kod här.


