2012-07-10 44 views
12

是否有可能在javascript中將一個方法添加到數組()中? (我知道原型,但我不想爲每個數組添加一個方法,特別是一個)。在Javascript中添加一個Array對象的方法?

我想這樣做的原因是因爲我有以下代碼

function drawChart() 
{ 
    //... 
    return [list of important vars] 
} 

function updateChart(importantVars) 
{ 
    //... 
} 

var importantVars = drawChart(); 

updateChart(importantVars); 

而且我希望能夠做這樣的事情,而不是:

var chart = drawChart();<br> 
chart.redraw(); 

我希望有是一種方法,我可以附上一個方法,我回來了drawChart()。任何方式來做到這一點?

+0

這已經回答多次,但是,請記住這一點:*在JavaScript方法都是一流[功用]值*。也就是說,它們是*只是函數*,它們被命名爲 - 也就是評估 - *屬性*的結果。 – 2012-07-10 21:15:11

+1

這顯然是可能的,但這是可取的嗎?有副作用嗎?在迭代數組時,該方法會阻礙嗎?獲取數組長度時,該方法是否會計數? – arkanciscan 2014-07-23 22:58:19

回答

30

數組是對象,因此可以保持性能,如方法:

var arr = []; 
arr.methodName = function() { alert("Array method."); } 
3

只是實例化數組,創建一個新的屬性,併爲屬性分配一個新的匿名函數。

var someArray = []; 
var someArray.someMethod = function(){ 
    alert("Hello World!"); 
} 

someArray.someMethod(); // should alert 
7

是的,很容易做到:

array = []; 
array.foo = function(){console.log("in foo")} 
array.foo(); //logs in foo 
+0

..除IE外:p〜 – 2012-07-10 21:13:02

+1

有關IE的評論在之前的幾個版本中,是否仍然適用? – jmoreno 2016-04-07 04:43:42

1
function drawChart(){ 
{ 
    //... 
    var importantVars = [list of important variables]; 
    importantVars.redraw = function(){ 
     //Put code from updateChart function here using "this" 
     //in place of importantVars 
    } 
    return importantVars; 
} 

做它像這樣使得它如此您可以在收到後直接訪問該方法。

var chart = drawChart(); 
chart.redraw(); 
+0

令人沮喪的是,這個答案沒有得到更多upvotes。這是解決OP問題的唯一方法:如何在返回結果**中實際嵌入數組和相關函數**。 (碰巧,這正是我需要知道的。謝謝,@Aust!) – 2017-12-07 01:41:22

0
var arr = []; 
arr.methodName = function() {return 30;} 
alert(arr.methodName); 
+0

雖然這段代碼可能回答這個問題,但提供關於如何和/或爲何解決問題的額外上下文會提高答案的長期價值。 – 2017-03-03 12:08:28

相關問題