2014-02-05 124 views
0

我的C#面向braincells都跟我說這應該工作:調用的函數,而在函數中

var MyApp = function() { 
currentTime = function() { 
    return new Date(); 
    }; 
}; 

MyApp.currentTime(); 

顯然事實並非如此。但是,如果一個javascript函數是一個對象,我不應該能夠調用該對象上的函數嗎?我錯過了什麼?

+0

JavaScript是一種功能範圍的語言。另外,沒有'var'聲明的變量將成爲全局範圍。給[這](http://stackoverflow.com/questions/111102/how-do-javascript-closures-work)一讀 –

回答

2

currentTime是全球性的(當您撥打myApp時設置),而不是MyApp的財產。

稱呼它,不需要重新定義功能:

MyApp(); 
currentTime(); 

然而,這聽起來像你想要麼:

一個簡單的對象

var MyApp = { 
    currentTime: function() { 
     return new Date(); 
    }; 
}; 

MyApp.currentTime(); 

一個構造函數

var MyApp = function() { 
    this.currentTime = function() { 
    return new Date(); 
    }; 
}; 

var myAppInstance = new MyApp(); 
myAppInstance.currentTime(); 
+3

真(因此upvote),但我吐了一點。 – user2864740

+0

尼斯忍者編輯:-P – qwertynl

+0

謝謝,這是非常有益的。 –

1

你可以改變你的代碼位,並使用此:

var MyApp = new (function() { 
    this.currentTime = function() { 
    return new Date(); 
    }; 
})(); 

MyApp.currentTime(); 

或者,你可以這樣做:

var MyApp = { 
    currentTime: function() { 
     return new Date(); 
    } 
}; 

MyApp.currentTime();