2012-02-17 57 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 2012-02-17 11:18:10

+0

@pimvdb:謝謝,我不確定它是jQuery還是Javascript,而且我找不到資源來確定它是否是jQuery特有的。 – dotancohen 2012-02-17 11:32:56

回答

5
  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

至於爲什麼我們使用{}.hasOwnProperty,而不是someArray.hasOwnProperty,我猜用戶可能被保護hasOwnPropertysomeArray正在申報(通過使用一個空的對象)。如果他沒有這樣做,那麼以下是可能的;

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 2012-02-17 11:38:57

3

你在混淆jQuery和JavaScript。

{}是一個JavaScript構造,是一個空對象。

call() method也是JavaScript的