2012-05-31 39 views
5

有這兩者之間有什麼區別:這兩者有什麼不同?

var test1 = function() { 
    this.method1 = function() {} 
} 

var test2 = function() {}; 
test2.method1 = function() {}; 
+4

是的。語法錯誤:'var test2 = function();' – diolemo

+0

@diolemo我修正了語法錯誤。 – Triptych

回答

4

第一片斷接受this對象,不管是什麼,以及功能分配給其命名method1槽(字段)。this可以表示不同的對象,這取決於如何test1叫做:

  • 時稱爲作爲一個獨立的功能 - test1() - thiswindow
  • 時稱爲作爲構造 - new test1() - this指正在創建
  • 對象時經由callapply稱爲 - test1.apply(someObject) - this指參數

第二個片段以test2爲對象,並將一個函數分配給其名稱爲method1的插槽。

1

第一種方式是創建多個對象,需要有new關鍵字構造:

var mytest1 = new test1(); 
mytest1.method1(); 

第二種方式可立即使用:

test2.method1(); 
+4

請注意'test1'不一定是構造函數。它可以作爲一個使用,但也可以在現有對象的上下文中運行。 – apsillers

0

假設語法正確,第一個是一個構造函數,它給出了通過new test1()創建的一個名爲method1的方法創建的所有test1對象。第二個只是向構造函數對象添加一個函數。在JavaScript中,函數是可以具有屬性(包括方法)的對象。

0

第一版本實際創建提供給實例化的,像這樣的所有對象的方法:

var o = new test1(); 
o.test1(); 

第二簡單地連接的功能爲對TEST2功能的屬性。如果你熟悉其他基於類的OO語言,這個工作就像一個靜態方法。您將無法訪問第二個示例中的this指針。

0

第一個:

var test1 = function() { 
    this.method1 = function() {} 

}

定義函數 「測試1」。一旦(並且僅當)調用「test1」時,「this.method1」將被定義爲一個函數,它什麼也不做。

第二種:

var test2 = function() {}; 
test2.method1 = function() {}; 

創建函數「TEST2」,並在同一時間定義了函數「test2.method1」,而不需要調用第一函數。

0

第一個在任何調用test1()時設置method1屬性。

第二一個限定一個空的功能和設置方法1屬性上TEST2

相關問題