替换新函数

时间:2016-04-26 16:44:32

标签: javascript function self-reference

通过new Function(...)调用将某些字符串转换为函数。

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

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

1 个答案:

答案 0 :(得分:0)

执行此类操作的唯一方法是使用闭包。

例如:

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在构造函数内工作,无论严格模式如何。

有关该主题的其他链接: