2012-07-10 3 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で*メソッドは、ファーストクラス[機能]の値です*。つまり、それらは*関数*であり、それは - *プロパティ*を評価した結果です。 –

+1

これは明らかに可能ですが、お勧めですか?副作用はありますか?配列を反復処理するとき、メソッドは途中で取得できますか?配列の長さを取得するときにメソッドはカウントしますか? – arkanciscan

答えて

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〜 –

+1

IEについてのコメントはいくつか前のバージョンでしたが、まだ適用されていますか? – jmoreno

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

この答えがより多くのアップボントを得なかったことに懐疑的です。これはOPを扱う唯一のものです:関連する関数**を持つ配列を返す結果**に実際に配列を埋め込む方法です。ありがとう、@Aust!) –

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

このコードは質問に答えるかもしれませんが、どのようにして問題が解決されたのか、および/またはそれがなぜ解決されるのかに関する追加の文脈を提供することで、回答の長期的価値。 –

関連する問題