测试执行回调的函数

时间:2016-01-31 18:09:51

标签: javascript function callback prototype

我正在尝试测试执行此回调函数的函数。它应该返回一个布尔值。 我希望你知道我的意思。

这里是代码示例:

function test(par, callback) {
  // ...
  if (typeof callback == 'function') { // make sure the callback is a function
    callback.call(this);
  }

}

test("par", function() {
  console.log("Test if in function test: " + "<if this is in function test>");
});

这类似于 instanceof 吗?

1 个答案:

答案 0 :(得分:1)

自删除arguments.caller

以来,有一种非标准的方式

function test(par, callback) {
  // ...
  if (typeof callback == 'function') { // make sure the callback is a function
    callback.call(this);
  }

}

test("par", function cb() {
  var isTestCaller = cb.caller === test;
  console.log("Test if in function test: " + isTestCaller);
});

通过错误堆栈(仍然是非标准的)实现此目的的另一种可能方式:

var checkCaller = function(fnName) {
  var e = new Error();
  var caller = e.stack.split('\n')[2].trim().split(' ')[1];
  return caller === fnName;
}

function wrapper(){
  console.log(checkCaller('wrapper'));
}

wrapper();