2

関数リテラルをオーバーロードする可能性があるかどうか、常に興味がありました。たとえば、関数でできることです。

var test=Function;
Function=function(arg)
{
      alert('test');
      return test(arg);
}

var b=Function("alert('a')");
var c=Function("alert('x')");
b();
c();

もちろん、これはプロジェクト全体をデバッグする良い方法だと推測できます。しかし、ここでの努力は何の役にも立たない。

専門家への質問は次のとおりです。

  1. たぶん、私が知らない何かがあるかもしれませんが、このいまいましいコンストラクターをオーバーロードする可能性があるのでしょうか? (しかし、おそらくそうではありません)。
  2. そうでない場合-これを行う方法-可能であれば-任意のブラウザーで(javascriptを使用するだけでなく、拡張言語を使用して-すべてのブラウザーがこのようなものを取得します)。
  3. そうでない場合 - firebug などのアドオンを介してこれを行う方法は??
4

1 に答える 1

1

あなたの用語はオフです:Function()は関数コンストラクターですfunction() {...}が、関数リテラルです。

いいえ、これを行うための移植可能な方法はないと思いますが、古いバージョンの Firefox にはあるかもしれません: 私の記憶が正しければwith() {...}、組み込みのコンストラクター関数をシャドーイングするために を使用することが可能であり、Firefox はリテラルでも新しいもの。

これはもはや機能していないようです:

var overload = {
    Object : function() {}
};

overload.Object.prototype.foo = 'bar';

with(overload) {
    document.writeln(new Object().foo);
    document.writeln({}.foo);
}
于 2009-01-27T09:55:58.250 に答える