有些字符串被new Function(...)
調用轉換成函數。替換arguments.callee裏面的新函數
如何在不使用arguments.callee
的情況下在字符串內部獲得對象的這個函數?
var f = new Function('return arguments.callee.smth');
f.smth = 128;
f(); // 128
有些字符串被new Function(...)
調用轉換成函數。替換arguments.callee裏面的新函數
如何在不使用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
一個使用arguments.callee的,沒有很好的替代
然而,像下面這樣的情況下,有沒有
arguments.callee
的替代品,因此其棄用可能是一個錯誤(請參閱bug 725398)
你不能。你爲什麼需要這樣做(你在用什麼'Function'構造函數)?請提供您的實際代碼,以便我們能夠提出適合您問題的解決方案。 – Bergi
也許看看[這種方法](http://stackoverflow.com/a/24032179/1048572)將值傳遞到構造函數的作用域。 – Bergi
@Bergi,實際上我想[擴展函數](// stackoverflow.com/q/36871299/4928642),但關於通過生成的函數自己引用自我引用的想法對我來說似乎很有趣。 – Qwertiy