如何调用“定义”内部的JavaScript函数-匿名方法

时间:2018-11-29 21:41:27

标签: javascript dojo amd js-amd esri-javascript-api

如何调用在匿名函数中定义但都在同一JS文件中的函数。这是我的代码段。如何从_testMethodInside()呼叫testMethodOutside()

// Line 1 to 13 is an existing code from ESRI API
    define([
        "dojo/_base/declare",
        "dojo/_base/html"
    ], function (
        declare,
        html
    ) {
        return declare([_WidgetBase, _TemplatedMixin], {
            _testMethodInside: function () {
                return 'success';
            }
        });
    });

//Call above using this function
    function testMethodOutside(){
        //How to call _testMethodInside() function from here
    }

3 个答案:

答案 0 :(得分:2)

遵循Dojo文档。 define块定义一个模块。您没有指定模块ID(可以通过显式传递,也可以从文件名中推断出来),因此我将继续进行操作,就好像模块名为my/Example

require(['my/Example'], function(Example) {
   var example = new Example();
   example._testMethodInside(); // here is where you call _testMethodInside
}

关键是因为模块是异步加载的,所以唯一可以放心调用的地方是传递给(AMD) require的回调函数。

答案 1 :(得分:2)

使用esri的Web应用程序构建器,您通常可以:

1)将所有代码包含在define / require中 2)将其分为两个模块

这就是应该进行流程设计的方式,例如:

file1.js:

define([
    "dojo/_base/declare",
    "dojo/_base/html"
], function (
    declare,
    html
) {
    return declare([_WidgetBase, _TemplatedMixin], {
        _testMethodInside: function () {
            return 'success';
        }
    });
});

file2.js:

  require([
        './file1'
  ], function (File1) {

      File1._testMethodInside();
  })

此外,以下划线开头的方法名称是指定私有方法的常见设计选择,因此_testMethodInside仅应由file1真正调用

答案 2 :(得分:0)

如果它只是_testMethodInside方法和testMethodOutside函数的常用功能,请考虑以下几点:

function sharedFunction() {
    return 'success';
}

function testMethodOutside() {
    sharedFunction();
}

define([
    "dojo/_base/declare",
    "dojo/_base/html"
], function (declare, html) {
    return declare([_WidgetBase, _TemplatedMixin], {
        _testMethodInside: sharedFunction
    });
});