Javascript 从调用者函数对象抓取'this'

Javascript 从调用者函数对象抓取'this',javascript,node.js,this,Javascript,Node.js,This,我知道我现在到处都在这样调用 screenshot.snap(this, $('.navbar-inner .container')); 在上面的代码中,传入的this对象来自mocha.js。它包含诸如当前测试名称、它所在的文件等信息。我使用这些信息来命名屏幕截图 我不想在任何地方都传递这个引用,但无论我如何尝试在snap函数中找到它,我都无法找到我需要的信息 var testContext = exports.snap.caller; //.prototype? .this? 我已经检查

我知道我现在到处都在这样调用

screenshot.snap(this, $('.navbar-inner .container'));
在上面的代码中,传入的this对象来自mocha.js。它包含诸如当前测试名称、它所在的文件等信息。我使用这些信息来命名屏幕截图

我不想在任何地方都传递这个引用,但无论我如何尝试在snap函数中找到它,我都无法找到我需要的信息

var testContext = exports.snap.caller; //.prototype? .this?
我已经检查了exports.snap.caller.toString,它是在mocha测试套件中调用的函数。我通过一个调试repl完成了这项工作,在进一步检查中,我可以得到的唯一信息是,它不包含来自调用函数this的任何内容


有没有办法做到这一点,或者每次调用screenshot.snap函数时,我都无法传递this参数?

您可以在before块中执行以下操作:

var snap;
before(function () {
    browser.get('https://angularjs.org');
    snap = screenshot.snap.bind(this);
});
然后替换使用screenshot.snapthis,$'.navbar-inner.container';使用快照$'.navbar-internal.container'

根据mocha处理this指针的方式,您可能需要在beforeach循环中执行此操作。

否,其他作用域的this值不能通过编程访问


您需要显式地将值传递给该snap函数,或使其在snap函数访问的全局作用域中可用。

是否尝试了arguments.callee.caller?:此属性替换arguments对象的过时arguments.caller属性…但我也尝试了arguments.callee.caller,它也只是一个函数实例。