2012-02-17 7 views
3

は、前の質問への応答では、私はthis helpful answerを受け取っ:JavaScript構造体 `{}`と `call()`は何ですか?

for (var i in someArray) { 
    if ({}.hasOwnProperty.call(someArray, i)) 
     alert(someArray[i]); 
} 

私の質問は以下のとおりです。

私は構築{}について読むことができます
  1. ?私はjQueryのドキュメントでそれを見つけることができず、Googleには不可能です。

  2. どこでcall()関数について読むことができますか? Searching the jQuery API siteは、一見関連性のあるものは出せません。

ありがとう。

+6

実際にjQueryに関連するものはありません。 – pimvdb

+0

@pimvdb:jQueryかJavascriptかどうかはわかりませんでした.jQuery固有のものかどうかを知るためのリソースが見つかりませんでした。 – dotancohen

答えて

5
  1. {}の一部であり、空のオブジェクトを宣言する1つのの方法です。これはオブジェクトリテラル構文と呼ばれ、その詳細についてはhereを読むことができます。

  2. call()メソッドはJavaScriptメソッド(jQueryではありません)です。再び、あなたはそれについての詳細を読むことができますhere。基本的にcall()は、call()を呼び出す関数内のthisの値を変更することができます。これはapply()に関連しています。であることとは対照的に、特定のコードを見てみる

    var array = new Array; 
    
    function foo() { 
        alert(this === array); 
    }; 
    
    foo(); // false; 
    foo.call(array); // true 
    

、我々は配列をループし、値を確認するhasOwnProperty方法を使用している(i)は(someArrayアレイが存在しますプロトタイプ鎖someArray

someArray.hasOwnPropertyとは対照的に、我々は{}.hasOwnPropertyを使用している理由については、私は(空のオブジェクトを使用することによって)ユーザーがsomeArrayで宣言されているhasOwnPropertyに対してを保護するかもしれないを推測。もし彼がこれをしなかったなら、次のことが可能であったかもしれません。

var someArray = []; 
someArray.hasOwnProperty = function() { 
    return true; // always return true... muahahaha. 
} 

さらには、

var someArray = []; 
someArray.hasOwnProperty = 4; // now hasOwnProperty isn't even a function. Calling someArray.hasOwnProperty() will result in an error. 
+0

hasOwnPropertyチェックは、すべての配列要素がシーケンシャルであるわけではないので、配列内の未定義オブジェクトを保護するためのチェックです。ありがとう! – dotancohen

3

jQueryとJavaScriptが混乱しています。

{}はJavaScriptのコンストラクトであり、空のオブジェクトです。

call() methodもJavaScriptの

関連する問題