【问题标题】:Replace arguments.callee inside of new Function在新函数中替换 arguments.callee
【发布时间】:2016-04-26 16:44:32
【问题描述】:

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

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

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

【问题讨论】:

  • 你不能。为什么需要这样做(你使用 Function 构造函数做什么)?请提供您的实际代码,以便我们提出适合您问题的解决方案。
  • 也许看看this approach 将值传递到构造函数的范围内。
  • @Bergi,其实我想extend function,但是通过生成的函数本身获取自我引用的想法对我来说似乎很有趣。
  • 你应该删除这个问题,还是我们应该回答这是不可能的?
  • @Bergi,回答了它。但是对于关于班级的问题,答案是没有用的。

标签: javascript function self-reference


【解决方案1】:

这样做的唯一方法是使用闭包。

例如:

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 在构造函数中工作。

关于该主题的其他链接:

【讨论】:

  • 返回的不是new Function(),而是一个“绑定函数”(例如没有.prototype)。你本来可以更容易的:-)
  • @Bergi, “你本来可以更轻松的 :-)” - 怎么样?
  • 通过废弃 new Function 并返回一个闭包(从函数表达式创建),我的意思是。
猜你喜欢
  • 2013-10-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-30
  • 1970-01-01
  • 1970-01-01
  • 2014-02-08
  • 2011-09-22
相关资源
最近更新 更多