2011-03-17 132 views
15

嘿大家,這是23號從約翰Resig的JavaScript高級http://ejohn.org/apps/learn/#23,叫關於詞彙JavaScript的 - 功能作爲對象屬性

What happens if a function is an object property.

1),變量武士刀是對象,對?如果匿名函數是它的屬性,那麼稱爲「使用」的是什麼?我認爲「使用」也會被稱爲財產?或者是「使用」也是一個對象,因爲它包含一個值,即一個函數? 2)。該函數的目的是改變isSharp:true to isSharp:false? What!This.isSharp究竟做了什麼?

3)當斷言!katana.isSharp,什麼是它實際上主張?那是夏普現在被設置爲「假」?

var katana = { 
    isSharp: true, 
    use: function(){ 
    this.isSharp = !this.isSharp; 
    } 
}; 
katana.use(); 
assert(!katana.isSharp, "Verify the value of isSharp has been changed."); 

回答

20
  1. 是,katana是一個對象(使用{ ... }符號創建)。 「使用」是其將爲匿名功能(這也是一個對象)的對象的屬性的名稱。

  2. 功能反轉的isSharp(因此從truefalsefalsetrue)的值。

  3. 據斷言isSharp是一些東西,不計算爲真(這幾乎是一切,除了undefinednullfalse0等)。在這種情況下,由於isSharp始終爲truefalse,它聲稱它是false

樣品的主要點(和冷卻部分)是這一行:

katana.use(); 

這個第一獲取的「使用」屬性的從katana對象的值(這是katana.use部) 。該值是之前的匿名函數。然後,執行該功能(即()部分)。真正酷的是,它是執行代表katana對象的 - 這意味着在匿名函數this是對katana對象的引用時,這就是所謂的這種方式。

+0

它的斷言isSharp是「falsy」!謬誤和不真實(明顯)不同。 – Raynos 2011-03-17 03:02:33

+0

@Raynos:呃,是的,這就是爲什麼我把「不真實」而不是「不真實」「。如果你將true定義爲「不是假的東西」,這是有道理的:-)我會讓它更模糊,謝謝指出 – Cameron 2011-03-17 03:06:55

+0

非常感謝。你說很酷的部分是它是代表Katana對象執行的。爲什麼它很酷?創造一些實際優勢嗎?如果是這樣,它給了什麼實際優勢? – mjmitche 2011-03-17 03:13:24

1

1)Katana是一個對象。 Katana.use是一個函數。它是一個包含函數作爲值的屬性。它包含的值恰好是一個匿名函數。

區別在於Katana.useKatana的屬性,並且Katana.use的值是一個函數。 useKatana上定義的關鍵字,因爲Katana["use"]也可以使用。

2)它的設置isSharp爲NOT isSharp所以無論是真實的 - >假的還是假的 - >真

3)斷言是說katana.isSharp === false這應該是因爲它是orginally真實的,但然後設置爲false。

1
  1. use是對象katana的一個屬性。
  2. !this.isSharp會否定this.isSharp的價值。如果isSharp爲true,則返回false,否則返回false。
  3. assert檢查布爾結果的結果是否爲真。如果結果爲假,則斷言失敗。