2013-02-25 62 views
4

我碰巧注意到的Javascript也支持Function關鍵字,就像在ActionScript。由於兩者都源自ECMA腳本,所以存在這種相似性是常識。不過我很好奇,什麼功能代表在Javascript的情況下,如果沒有一個類(如在AS3)。在Javascript中如何定義'Function'(而不是'function')?

在JS,

var func = new Function();var func = new Function;

分配一個被稱爲 '匿名' 將變量 'FUNC' 功能。

難道是僅僅實現以面向對象的方式實際「功能」的方法..

由於大多數瀏覽器(FF,即&鉻)似乎實現它以同樣的方式,是解決在規格?

+0

檢查此鏈接[鏈接] http://stackoverflow.com/questions/336859/javascript-var-functionname-function-vs-function-functionname – 2013-02-25 14:27:45

+1

'Function'是不是一個真正的關鍵字。它只是一個用作對象構造函數名稱的標識符。函數是對象,但是創建它們的語法是不同的。 – 2013-02-25 14:29:05

+3

Here:http://es5.github.com/#x15.3.2 – 2013-02-25 14:29:43

回答

6

Function是「類」的所有功能,從擴展。所有功能都是真的Function對象。

(function(){}) instanceof Function === true 

您還可以使用new Function從字符串(如eval)令的功能。

var func = new Function('x,y', 'return x+y;') 
+1

你在上一個例子中忘了一些引號。它們需要是構造函數的單獨字符串參數,而不是逗號分隔的字符串。 – 2013-02-25 14:31:48

+0

@thesystem:它們可以是/或:-)見注,http://es5.github.com/#x15.3.2.1 – 2013-02-25 14:32:34

+0

真的嗎?我很抱歉。我從來不知道這一點。 – 2013-02-25 14:32:53

-1

1路:

var Person = function() { 
    this.name; 
    this.age; 
} 

var p1 = new Person(); 

第二個辦法:

function Person() { 
    this.name; 
    this.age; 
} 

var p1 = new Person(); 
+1

這是關於函數表達式和函數聲明,而不是關於函數構造函數。 – 2013-02-25 14:29:25

+0

這不是問題所在。 – 2013-02-25 14:30:03

2

「在JavaScript中每個函數實際上是一個函數對象。」 MDN Documentation

function myFunc(a, b) { 
    console.log('test'); 
} 

基本上等於

var myFunc = new Function('a', 'b', 'console.log("test")'); 

然而有來聲明一個函數的兩種方法之間的一些差異。閱讀文檔!

+1

它們非常相似,但有一些重要的區別。一個是第一個語法將被「懸掛」。但更重要的是,第二個語法將在全局變量範圍內進行評估,而不是在本地範圍內進行評估。 JS解釋器不在內部使用構造函數。 – 2013-02-25 14:37:09

+1

感謝@系統,通過重新閱讀相關文檔來澄清這一點。編輯我的答案。 – marekful 2013-02-25 14:43:47

相關問題