一部の文字列は、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();
またはSO:
はvar f = (function (g) {
return function f() {
return g.apply(f, arguments)
};
})(new Function('return this.smth'));
f.smth = 128;
f();
とにかく、内部strictモードに関係なく、機能を構築arguments.callee
作品のように思えます。トピックについて
追加リンク:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/arguments/callee
なし良い代替
とarguments.calleeの使用は、しかし、次のような場合には、存在しません
arguments.callee
に代わるものです。そのため、その廃止はバグかもしれません(バグ725398を参照)
あなたがすることはできません。なぜあなたはこれを行う必要がありますか( 'Function'コンストラクタは何を使用していますか?)問題に適したソリューションを提案できるように、実際のコードを入力してください。 – Bergi
構築された関数のスコープに値を渡すための[このアプローチ](http://stackoverflow.com/a/24032179/1048572)を見てください。 – Bergi
@Bergi、実際に私は[関数を拡張したい](// stackoverflow.com/q/36871299/4928642)、生成された関数自身による自己参照の取得についての考えは私にとっては興味深いようです。 – Qwertiy