2013-05-03 139 views
2

這兩種方法有什麼區別?'新'對JS方法有什麼影響?

function ObjectB() { 
    this.methodA = new function() { 
     alert('a'); 
    }; 
    this.methodB = function() { 
     alert('b'); 
    }; 
} 

什麼我想問問,是什麼影響了在一個JS方法?

我已經做了小提琴,我想探索的方法的行爲,我也加入了此代碼:

var v = Object.create(ObjectB); 
v.methodC = function() { 
    alert('c'); 
} 

v.methodB(); 
v.methodA(); 
v.methodC(); 

但我的小提琴似乎沒有工作。

小提琴是在這裏:http://jsfiddle.net/N8SNG/

謝謝:)

+0

是的,我看到了那個帖子。但是這顯示了創建對象時使用了多少新東西。我在談論新功能() – 2013-05-03 11:53:02

+0

呃? 'new'只能**和功能一起使用。 'this.methodA = new function(){alert('a'); };'基本上會創建一個空的對象。它與'this.methodA = new someFunction;'沒有區別。在這種情況下,「呼叫括號」是可選的。 'new'總是做同樣的事情:創建一個對象並執行一個構造函數。 – 2013-05-03 11:54:01

+0

如果你閱讀這個問題的答案,你會發現它們都有'new function()'就像這個問題一樣。 – JJJ 2013-05-03 11:55:42

回答

3

methodA不是方法,因爲new操作導致之後被稱爲構造函數。所以你迴歸一個對象methodA與匿名函數相當於它的類。

這是因爲如果你這樣寫的:

var MethodA = function() { 
    alert('a'); 
}; 
this.methodA = new MethodA; 

這最後一行是一樣的:

this.methodA = new MethodA(); 
+0

因此,當methodA被解析器讀取時,alert('a')會彈出,alert('b')會在methodB被調用時彈出? – 2013-05-03 12:06:45

+1

第一個警報顯示在對象的實例化中。另一方面,每次調用該方法。是。如果您比較Java:第一個警報是在名爲「methodA」的Object的構造函數中完成的。第二個就像一個常規方法。所以每次調用「methodA」時,都會創建一個新對象並調用其構造函數。 – 2013-05-03 12:08:38

+0

真棒謝謝...... – 2013-05-03 12:11:16

0

新上使用函數來創建對象。這些函數的構造函數。 由於功能創建功能,新功能創建對象。 當你使用匿名函數時,你創建了一個「object」類型的對象。當你指定構造函數的名字時,你可以創建一個這樣的對象:例如

function Human(){}; 
man=new Human(); 

是什麼樣的 「人」,或更好人類的一個實例:

人的instanceof人力

相關問題