改变功能范围

Changing function scope

本文关键字:范围 功能 改变      更新时间:2023-09-26

我想测试这个模块:

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

我这样测试:

var myModule = require("./myModule")
var sinon = require("sinon")
var util = require('util');
sinon.stub(myModule,"fa").returns("stub")
console.log(myModule.fb()) //expect to display "function B + stub"

实际显示的是"函数B +函数A"

如果我将fb的方法体替换为return "function B + " + this.fa()(注意this.的添加),那么它将按预期工作。

是否有一种方法来模拟没有被this调用的函数?

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

实际情况是,你将该函数称为"as function",函数本身与你导出的函数不同。

这篇文章可以更清楚地说明我所说的话。理解"this"关键字