如何在 javascript / google 应用程序脚本中从外部函数和同级函数调用函数
How to invoke a function from both an outside and a sibling function in javascript / google app script
基本问题,但我无法弄清楚:(。解决一个问题会使另一个问题解决。这是缩小范围的具体案例,我们将不胜感激。
function onOpen() { // first entry point
var helper = new level1Function();
helper.level2FunctionA();
}
function onFormSubmit() { // second entry point
var helper = new level1Function();
helper.level2FunctionC();
}
function level1Function() {
this.level2FunctionA = function() {
console.log('hi');
}
function level2FunctionB() {
// how do I invoke level2FunctionA from here w/o breaking onOpen entry point?
}
this.level2FunctionC = function() {
level2FunctionB();
}
}
onOpen();
onFormSubmit();
// looking for 2 hi's to the console, one through each flow
创建对变量 self 的引用,在函数体顶部赋值给 this
function level1Function() {
var self = this;
this.level2FunctionA = function() {
console.log('hi');
}
function level2FunctionB() {
self.level2FunctionA();
}
this.level2FunctionC = function() {
level2FunctionB();
}
}
另一个解决方案,而不是创建对 self
的引用,因为这在许多情况下容易出错,您可以使用 Function.prototype.bind
并创建一个函数 boundLevel2FunctionB
,它具有 this
绑定到当前 level1Function
实例(我看到您正在使用 new
关键字调用它)。
代码:
[...] // level2Function body
function level2FunctionB() {
this.level2FunctionA();
}
var boundLevel2FunctionB = level2FunctionB.bind(this);
this.level2FunctionC = function() {
boundLevel2FunctionB();
}
[...]
干杯!
基本问题,但我无法弄清楚:(。解决一个问题会使另一个问题解决。这是缩小范围的具体案例,我们将不胜感激。
function onOpen() { // first entry point
var helper = new level1Function();
helper.level2FunctionA();
}
function onFormSubmit() { // second entry point
var helper = new level1Function();
helper.level2FunctionC();
}
function level1Function() {
this.level2FunctionA = function() {
console.log('hi');
}
function level2FunctionB() {
// how do I invoke level2FunctionA from here w/o breaking onOpen entry point?
}
this.level2FunctionC = function() {
level2FunctionB();
}
}
onOpen();
onFormSubmit();
// looking for 2 hi's to the console, one through each flow
创建对变量 self 的引用,在函数体顶部赋值给 this
function level1Function() {
var self = this;
this.level2FunctionA = function() {
console.log('hi');
}
function level2FunctionB() {
self.level2FunctionA();
}
this.level2FunctionC = function() {
level2FunctionB();
}
}
另一个解决方案,而不是创建对 self
的引用,因为这在许多情况下容易出错,您可以使用 Function.prototype.bind
并创建一个函数 boundLevel2FunctionB
,它具有 this
绑定到当前 level1Function
实例(我看到您正在使用 new
关键字调用它)。
代码:
[...] // level2Function body
function level2FunctionB() {
this.level2FunctionA();
}
var boundLevel2FunctionB = level2FunctionB.bind(this);
this.level2FunctionC = function() {
boundLevel2FunctionB();
}
[...]
干杯!