2012-07-10 20 views
12

¿Es posible agregar un método a una matriz() en javascript? (Sé de prototipos, pero no quiero agregar un método a cada matriz, solo una en particular).¿Agregar un método al objeto Array en Javascript?

La razón por la que quiero hacer esto es porque tengo el siguiente código

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

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

var importantVars = drawChart(); 

updateChart(importantVars); 

Y yo quiero ser capaz de hacer algo como esto en su lugar:

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

que estaba esperando allí era una forma en la que podía adjuntar un método a lo que estoy devolviendo en drawChart(). ¿Alguna forma de hacer esto?

+0

Esto ya ha contestado a ser varias veces, sin embargo, tenga esto en cuenta: * Los métodos de JavaScript son de primera clase [Función] Valores *. Es decir, son * solo funciones * nombradas por, es decir, son el resultado de evaluar - * propiedades *. –

+1

Esto es claramente posible, pero ¿es aconsejable? ¿Hay efectos secundarios? Al iterar sobre la matriz, ¿el método se interpondrá en el camino? ¿El método cuenta al obtener la longitud de la matriz? – arkanciscan

Respuesta

30

arrays son objetos, y por lo tanto puede contener propiedades tales como métodos:

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

Simplemente crea una instancia de la matriz, crea una nueva propiedad y asigna una nueva función anónima a la propiedad.

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

someArray.someMethod(); // should alert 
7

Sí, fácil de hacer:

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

.. excepto en IE: p ~ –

+1

El comentario sobre IE fue hace un par de versiones, ¿todavía se aplica? – 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; 
} 

Hacerlo de esta manera hace que sea tan puede acceder al método directamente después de recibirlo.
decir

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

Frustrante que esta respuesta no recibió más votos ascendentes. Este es el único que aborda el OP: cómo insertar una matriz con la función ** asociada en el resultado de retorno **. (Da la casualidad, esto es exactamente lo que necesitaba saber. Gracias, @Aust!) –

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

Si bien este código puede responder a la pregunta, proporcionar un contexto adicional sobre cómo y/o por qué resuelve el problema mejoraría el valor a largo plazo de la respuesta. . –

Cuestiones relacionadas