如何在 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();
}
[...]

干杯!