在新函数中替换 arguments.callee

Replace arguments.callee inside of new Function

一些字符串被 new Function(...) 调用转换为函数。

如何在不使用 arguments.callee 的情况下在字符串中引用此函数?

var f = new Function('return arguments.callee.smth');
f.smth = 128;
f(); // 128

做这种事情的唯一方法是使用闭包。

例如:

var f = (function () {
  var f = new Function('return this().smth').bind(function () { return f });
  return f;
})();

f.smth = 128;
f();

左右:

var f = (function (g) {
  return function f() {
    return g.apply(f, arguments)
  };
})(new Function('return this.smth'));

f.smth = 128;
f();

无论如何,似乎 arguments.callee 在构造函数中工作,而不管严格模式如何。

关于该主题的其他链接: