节点js:在module.exports中调用内部函数

时间:2019-01-07 03:09:41

标签: javascript node.js

我正在编写一个模块,该模块需要调用模块中的内部函数并利用构造函数中的变量。要在内部调用这些函数,我可以使用变量mycode或使用关键字this。但是,使用mycode意味着使用全局变量,并且this可以被我的部分函数覆盖。这是我模块结构的简化模型:

// app.js
const MyCode = require('mycode.js');
var mycode = new MyCode();
mycode.function1($(html));

// mycode.js
module.exports = class {
    constructor() {
        this.alertUrl = true;
    }

    function1(html) { 
        html.find('a').each(function () {
            var url = $(this).attr('href');
            this.function2(url); // this is now overridden by jquery
        });
    }
    function2(url) { if (this.alertUrl) alert(url); }
}

我正在寻找一种类似于myModule.function2(url);的解决方案,其中myModule仅适用于模块内部的功能。

2 个答案:

答案 0 :(得分:1)

您可以改用箭头函数,这样for (fragment in supportFragmentManager.fragments) { if (fragment is SupportMapFragment) { continue } else if (fragment != null) { supportFragmentManager.beginTransaction().remove(fragment).commit() } } 引用是从外部范围继承的,而不是由this回调进行更改的:

each

另一个(不太优雅)的方法是在调用html.find('a').each((_, elm) => { var url = $(elm).attr('href'); this.function2(url); }); 之前保存对实例的引用:

each

问题实际上与模块没有任何关系,仅与函数的调用上下文有关。

答案 1 :(得分:0)

您可以将异步功能与导出一起使用...

const function_name = async () => {

};

export default function_name ;