更改功能范围

问题描述:

我试图测试这个模块:更改功能范围

function fa(){ 
    return "function A" 
} 
function fb(){ 
    return "function B + " + fa() 
} 
module.exports = {fa, fb} 

我这样测试:

​​3210

它实际上是显示 “功能的B +功能的”

如果我用return "function B + " + this.fa()替换fb的方法体(注意this.的添加),然后按预期工作。

有没有办法模拟一个没有用this调用的函数?

有没有方便的方法来做到这一点。您可以创建一个对象并将其用作参考,因此您将该函数作为“方法”调用

会发生什么情况是您将该函数调用为“函数”,函数本身与您的函数本身不同正在出口。

该阅读可以澄清更多关于我所说的。 Understanding 'this' keyword

+0

嗯我很抱歉,但不仅仅是它不回答我的问题,我相信这也是不正确的。我输出的功能与原点完全相同。问题存在于fa如何解决,无论是通过此引用还是通过本地范围。我知道如何处理'this',但我不知道如何更改函数范围。绑定一个新的上下文,无论是通过“绑定”还是使用“with”关键字都不起作用。 – tibo

+0

你是对的,它是相同的功能。但是当你对myModule.fa进行模拟时,“fa”函数就属于myModule对象。并且当您调用myModule.fb()时,“fa”函数不属于myModule对象,因为您将它作为函数调用 –

+0

对于不面对这些引用问题,并且不要使用'this'关键字,我通常写我的代码,如: var exportObject = {}; exportObject.fa = function fa(){ return'function A'; }; exportObject.fb = function fb(){ return'function B +'+ exportObject.fa(); }; module.exports = exportObject; –