有這兩者之間有什麼區別:這兩者有什麼不同?
var test1 = function() {
this.method1 = function() {}
}
和
var test2 = function() {};
test2.method1 = function() {};
有這兩者之間有什麼區別:這兩者有什麼不同?
var test1 = function() {
this.method1 = function() {}
}
和
var test2 = function() {};
test2.method1 = function() {};
第一片斷接受this
對象,不管是什麼,以及功能分配給其命名method1
槽(字段)。this
可以表示不同的對象,這取決於如何test1
叫做:
test1()
- this
將window
new test1()
- this
指正在創建call
或apply
稱爲 - test1.apply(someObject)
- this
指參數第二個片段以test2
爲對象,並將一個函數分配給其名稱爲method1
的插槽。
第一種方式是創建多個對象,需要有new
關鍵字構造:
var mytest1 = new test1();
mytest1.method1();
第二種方式可立即使用:
test2.method1();
請注意'test1'不一定是構造函數。它可以作爲一個使用,但也可以在現有對象的上下文中運行。 – apsillers
假設語法正確,第一個是一個構造函數,它給出了通過new test1()
創建的一個名爲method1的方法創建的所有test1對象。第二個只是向構造函數對象添加一個函數。在JavaScript中,函數是可以具有屬性(包括方法)的對象。
第一版本實際創建提供給實例化的,像這樣的所有對象的方法:
var o = new test1();
o.test1();
第二簡單地連接的功能爲對TEST2功能的屬性。如果你熟悉其他基於類的OO語言,這個工作就像一個靜態方法。您將無法訪問第二個示例中的this
指針。
第一個:
var test1 = function() {
this.method1 = function() {}
}
定義函數 「測試1」。一旦(並且僅當)調用「test1」時,「this.method1」將被定義爲一個函數,它什麼也不做。
第二種:
var test2 = function() {};
test2.method1 = function() {};
創建函數「TEST2」,並在同一時間定義了函數「test2.method1」,而不需要調用第一函數。
第一個在任何調用test1()時設置method1屬性。
第二一個限定一個空的功能和設置方法1屬性上TEST2
是的。語法錯誤:'var test2 = function();' – diolemo
@diolemo我修正了語法錯誤。 – Triptych