在新函数中替换 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
在构造函数中工作,而不管严格模式如何。
关于该主题的其他链接:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/arguments/callee
A use of arguments.callee with no good alternative
However, in a case like the following, there are not alternatives to arguments.callee
, so its deprecation could be a bug (see bug 725398)
一些字符串被 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
在构造函数中工作,而不管严格模式如何。
关于该主题的其他链接:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/arguments/callee
A use of arguments.callee with no good alternative
However, in a case like the following, there are not alternatives to
arguments.callee
, so its deprecation could be a bug (see bug 725398)