2011-08-11 97 views
0

我有下面的代碼,如何通過變量調用函數?

function MyFunc(){} 
var myFunc = new MyFunc(); 
myFunc(); // through TypeError this line, 

我怎樣才能使它工作,如果我要調用通過變量的函數?

回答

-2

案件不符。 Javascript是區分大小寫的。

+2

你的意思是myFunc,我想通過變量myFunc調用函數,而不是直接調用MyFunc。 – Thomson

1

在JavaScript中,函數只是另一個變量。

function MyFunc(){} 

相同

var MyFunc = function(){}; 

因此,這也是有效

function MyFunc(){} 
var myfunc = MyFunc; 
myfunc(); 
+1

*「...與......相同」*不,它不是。第一個是函數聲明,第二個是函數表達式,兩者之間有很大的區別。它們在不同的地方在句法上有效,它們在不同的時間被處理,並且它們對它們所在的範圍有不同的影響。 –

6

這樣做new MyFunc(),你治療MyFunc構造函數,它創建了一個對象。這是將MyFunc作爲您想要實例的類。你只是想指定另一個變量指向該函數,所以你不想要new()

你想只設置var myFunc = MyFunc,然後調用myFunc()就可以工作。

1

創建函數的對象的新關鍵字來創建對象

var myfun_var = function MyFunc(){ 
     alert("hello"); 
} 

and call myfun_var(); 
1

所以調用new MyFunc()將EXCUTE你把任何代碼在那裏 - 它的作用有點像其他語言構造 - 雖然不完全是。

如果它不是一個錯字,你想,如果你做的東西像

MyFunc.prototype.myFunc = function() { 
} 
1

我想你想要的東西要定義一個名爲myFunc的在你的類中的函數是這樣的:

var myFunc = function(){ 
    .... 
}; 

myFunc(); 

這會創建一個名爲myFunc的變量,它是對匿名函數的引用。

2

在JavaScript中,函數是第一類對象。要引用該對象,只需使用函數名稱即可。所以,如果你只是想通過myFunc變量調用MyFunc,只是分配給MyFuncmyFunc

function MyFunc(){} 
var myFunc = MyFunc; // <=== Change on this line 
myFunc(); 

您的原始行:

var myFunc = new MyFunc(); 

...調用MyFunc作爲一個構造函數,和myFunc(該變量)將接收對作爲結果創建的任何對象的引用。 (就像var now = new Date();創建一個Date對象並將其指定給now。)

+0

所以你可以解釋一下'var myFunc = MyFunc()',這行代碼創建了什麼對象? – Thomson

+2

執行'MyFunc()'函數並將函數的返回結果賦值給'myFunc'變量,就像'var el = document.getElementById(「header」);'會。 – jfriend00

+0

@ jfriend00,但MyFunc()函數中沒有返回語句,這是否意味着myFunc將收到一個空指針? – Thomson

相關問題