6

FunctiongetBody関数を持つようにプロトタイプを作成しました。

Function.prototype.getBody = function() {
    // Get content between first { and last }
    var m = this.toString().match(/\{([\s\S]*)\}/m)[1];
    // Strip comments
    return m.replace(/^\s*\/\/.*$/mg,'');
};

詳細については、こちらをご覧ください。私はそれをこのようにテストしようとしました:

console.log(console.log.getBody.getBody());

しかし、エラーを受け取りました:TypeError: console.log.getBody is undefinedconsole.log実際にプロトタイプを作成する前に定義されたためにこれが発生する可能性があることがわかったFunctionので、プロトタイプの直前に空の関数を作成xして呼び出しようとしました

console.log(x.getBody.getBody());

問題なく動作しました。console.logのタイプをチェックするtypeof console.logと「機能」になります。これが試してみるためのCodePenです。console.log.getBody未定義であることを除いて、私が期待していたことなので、これはすべて実際には驚きではありませんでした。

では、なぜプロトタイピングFunctionは影響を与えないのconsole.logでしょうか?Firefox18.0.1とFirebug1.11.1を使用しています。

4

1 に答える 1

5

これは、Firefox自体ではなくFirebugの問題のようです。私の推測ではFunction、Firebugはあなたのページとは異なるスコープに住んでいFunctionます。(他のブラウザとは異なり、Firebugは拡張機能であり、組み込みのブラウザツールではないため)

実際、Firebugの代わりに組み込みのFirefoxコンソール(Ctrl + Shift + K)を使用する場合、コードは完全に正常に機能します。

Firebugの内部に関する詳細は、ここにあります。

http://getfirebug.com/wiki/index.php/Firebug_Internals

この抜粋は興味深いかもしれません

FirebugがFirefoxから切り離され、新しいウィンドウまたは別のウィンドウで開くと、新しいウィンドウには独自のスコープがあります。そのスコープでは、いくつかのFirebugスクリプトタグがコンパイルされて、元のbrowser.xulウィンドウへの接続が作成されます。最も重要なのは、chrome.jsが各トップレベルウィンドウに固有であるということですが、切り離されたウィンドウで使用されるFirebugオブジェクトは、親browser.xulのオブジェクトです。

于 2013-02-05T19:45:03.260 に答える