2013-10-03 81 views
0

是否可以定義函數並將函數的副本分配給不同的變量?將函數的副本分配給var

這實質上是多遠我有...

function add(x, y){ 
    return x + y; 
} 

var function1 = new add() 
var function2 = new add() 

這似乎並不如它試圖每次運行加載函數工作。

var function1 = new function add() 

我是否需要以某種方式使用原型,或者我是否以錯誤的方式查看原型?

+0

你可以這樣做 - 'var function1 = add; function1();' – ps2goat

+3

你爲什麼要拷貝一個函數? – SLaks

+0

爲什麼你需要該功能的副本?你想達到什麼目的? –

回答

3

您正在評估函數。爲了本身的功能分配給一個變量,使用

var function1 = add; 
var function2 = add; 

可是,爲什麼你要複製的功能,它不是很清楚。

+0

我怎麼錯過了!?完美,謝謝! – Captastic

5

這應該做的伎倆

var function1 = add; 
var function2 = add; 
0

如果你只是想創建到函數引用只是做此修改

function add(x, y){ 
    return x + y; 
} 

var function1 = add; 
var function2 = add; 

在這之後你可以調用的函數是這樣的。

function1(10,11); 

function2(1,2); 
0

Javascript中的函數與其他任何對象一樣。

您可以創建許多人提到了同樣的功能,並將它們存儲例如在陣列

function add(x, y) { 
    return x + y; 
} 

var v = [add, add, add, add]; 

alert(v[3](33, 9)); // Will show 42 

唯一的「神奇」的事情發生,當你調用一個函數從一個對象成員查找得到它

x = {}; 
x.f = add; 
x.f(12, 3); // Returns 15 

將會發生的「奇怪」事情是this內部的函數調用時,將以此方式爲對象,而不是全局的window對象,因爲它會在您直接調用函數時發生。

這也意味着,混淆性不夠,

x.f(z); 

是不一樣的

[x.f][0](z); 

或作爲

var ff = x.f; 
ff(z); 

因爲在第一種情況下thisx,在第二種情況下this將是數組,而在第三種情況下,它將是全局的window對象。