2012-07-10 4 views
12

Ist es möglich, eine Methode zu einem Array() in Javascript hinzuzufügen? (Ich weiß über Prototypen Bescheid, aber ich möchte keine Methode zu jedem Array hinzufügen, nur eines speziell).Eine Methode zu Array-Objekt in Javascript hinzufügen?

Der Grund, warum ich dies tun möchte, ist, weil ich habe den folgenden Code

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

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

var importantVars = drawChart(); 

updateChart(importantVars); 

Und ich möchte so etwas wie dies in der Lage sein, anstatt zu tun:

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

Ich war dort der Hoffnung war ein Weg, ich konnte nur eine Methode an, was ich in drawChart() zurückgeben. Irgendeine Möglichkeit, das zu tun?

+0

Das bereits mehrfach beantwortet, jedoch werden muss, beachten Sie dies: * Methoden in JavaScript sind First-Class [Funktion] * -Werte. Das heißt, sie sind * nur Funktionen *, die benannt sind - das heißt, sind das Ergebnis der Auswertung - * Eigenschaften *. –

+1

Dies ist eindeutig möglich, aber ist es ratsam? Gibt es Nebenwirkungen? Wird die Methode bei der Iteration über das Array in die Quere kommen? Zählt die Methode beim Abrufen der Länge des Arrays? – arkanciscan

Antwort

30

Arrays Objekte sind, und können daher Eigenschaften halten wie Methoden:

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

Instantiieren Sie das Array, erstellen Sie eine neue Eigenschaft und weisen Sie der Eigenschaft eine neue anonyme Funktion zu.

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

someArray.someMethod(); // should alert 
7

Yep, einfach zu tun:

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

.. außer in IE: p ~ –

+1

Der Kommentar über IE war ein paar Versionen vor, gilt es noch? – 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; 
} 

es so tun es macht so Sie können direkt nach Erhalt auf die Methode zugreifen.
heißt

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

Frustrierend, dass diese Antwort nicht mehr Upvotes bekommen hat. Dies ist das einzige, das das OP anspricht: wie man Array tatsächlich mit der zugehörigen Funktion ** in das Rückgabeergebnis ** einbettet. Danke, @Aust!) –

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

Während dieser Code die Frage beantworten kann, würde das Bereitstellen eines zusätzlichen Kontextes, wie und/oder warum er das Problem löst, den langfristigen Wert der Antwort verbessern . –

Verwandte Themen