1

、などのネイティブJavaScriptコンストラクター/関数はFunction、どのスコープでも常に使用できますかObjectArrayそれらはグローバルオブジェクトまたは同じレベルまたはそれ以上のレベルのようなものに継承されていますか?

例として、MooToolsの自己実行関数には次の行が含まれています。

var Function = this.Function;

だから私は自分自身に尋ねました、これらのネイティブコンストラクターが利用できなくなる状況はありますか?たぶんサーバーサイドか厳密なJSですか?それとも、ローカル参照をキャッシュするのはパフォーマンスの問題ですか?しかし、もしそうなら、なぜこのようにしないのですか?

var Function = Function;
4

1 に答える 1

1

彼らは同じ名前を持っているので、あなたはそれをすることはできません。

(function() {
    var Function = Function;

    return Function;
})(); // undefined

そもそもなぜそれが行われるのか?おそらく、ユーザーのエラーや再定義を防ぎ、スコープチェーンの量を減らすために、エンジンは何かを見つけるために検索する必要があります。関連するブログ投稿: http: //blog.minite.ch/?p = 47

もちろん、Function読み取り専用ではないので、誰かがFunctionグローバル名前空間で再定義したとしても、それは役に立ちません。これを行う人は誰でもそれに値しますが=)


編集:彼らが実際にユーザーエラーから保護したいのであれば、絶対確実な方法は次のようになります:

var Function = (function() {}).constructor;

しかし、上記のように、それは無意味です。

于 2012-04-15T13:52:00.150 に答える