Javascript を学習しているときに、関数の apply プロパティを再宣言しようとしました。これまでのところ問題ありません。
function foo() { return 1; }
alert(foo()); // 1
alert(foo.apply(null)); // 1
foo.apply = function () { return 2; }
alert(foo()); // 1
alert(foo.apply(null)); // 2
ここで、apply にさらに何かを実行させ、「古い」apply (logging など) を呼び出そうとしました。
var old = foo.apply;
foo.apply = function() {
alert("A");
return old(null);
}
alert(foo.apply(null));
私は得る
TypeError: Function.prototype.apply が [オブジェクト ウィンドウ] で呼び出されました。これは関数ではなくオブジェクトです。
私は試した
foo.apply = function() {
alert("A");
return arguments.callee[Function.prototype.apply](null);
}
alert(foo.apply(null));
私は得る
TypeError: オブジェクト function () { alert("A"); のプロパティ 'function apply() { [ネイティブ コード] }' return arguments.calleeFunction.prototype.apply; } は関数ではありません
私が試みていることを達成するための実際の方法はありますか? それとも、Function.prototype.apply がネイティブ コードであるため、何らかの制限がありますか?