2012-04-15 3 views
1

FunctionObjectArrayなどのネイティブJavaScriptコンストラクタ/ファンクションは、常にどのスコープでも利用できますか?彼らは、グローバルオブジェクトや同じレベルまたはそれ以上のもののようなものによって継承されていますか?一例として、ネイティブJavaScript関数は「スーパーグローバル」なのでしょうか?

、MooToolsのは自己実行機能に次の行が含まれています

var Function = this.Function; 

だから私は、これらのネイティブのコンストラクタが使用不能になったどのような状況が存在し、自分自身に尋ねましたか?おそらくサーバー側または厳格なJSですか?または、ローカル参照をキャッシュするのは単なるパフォーマンス上の質問ですか?しかしもしそうなら、このようにしてはどうでしょうか。

+0

ネイティブコンストラクタはグローバルオブジェクト(グローバルオブジェクトのプロパティ)です。したがって、常に利用できます。 –

+1

@ imeVidas、それは永遠に真実ではありません。私はそれらを簡単に上書きすることができます。 'Function = 6;'後でそれらを参照する手間がかかりますが、グローバル参照は確実にこの方法で失われる可能性があります。 – davin

答えて

1

これらは同じ名前なので、そのことはできません。

(function() { 
    var Function = Function; 

    return Function; 
})(); // undefined 

なぜそれが最初に行われたのですか?おそらく、ユーザーのエラーや再定義を防ぎ、何かを見つけるためにエンジンが調べなければならないスコープチェーンの量を減らすことも考えられます。関連するブログポスト:もちろんhttp://blog.minite.ch/?p=47

Functionは読み取り専用ではないので、誰かが助けないでしょうグローバル名前空間にFunctionを再定義しなかった場合でも。彼らは実際にユーザー・エラーから保護したいなかった場合は、確実な方法は、次のようになります:

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

しかし、上述のように、それは、無意味だ、これはそれに値する、しかし=)


EDITん誰も。

+0

ああ、ありがとう、知ってよかった! :) – headacheCoder

+0

minitech、あなたはそれのためのリンクを持っていますか? – loveNoHate

+0

@dollarVar:ああ、それを壊して申し訳ありません。 http://web.archive.org/web/20120617142826/http://blog.minite.ch/?p=47 – Ryan

関連する問題