2012-07-10 6 views
12

Javascript'te bir diziye() bir yöntem eklemek mümkün mü? (Ben prototipleri biliyorum ama her diziye, özellikle sadece bir tane eklemek istemiyorum).Javascript'te Array nesnesine bir yöntem ekleyin?

ben bunu yapmak istiyorum nedenidir Aşağıdaki kodu

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

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

var importantVars = drawChart(); 

updateChart(importantVars); 

var Ve ben bunun yerine böyle bir şey yapmak mümkün istiyorum, çünkü:

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

orada umuyordum drawChart()'da döndüğüme bir yöntem ekleyebileceğim bir yöntemdi. Bunu yapmanın herhangi bir yolu var mı?

+0

Ancak bunu göz önünde bulundurun: * JavaScript yöntemlerdir birinci sınıf [fonksiyonu] değerleri *. Yani, bunlar * sadece isimlendirilen * işlevlerdir - yani değerlendirmenin sonucudur - * özellikler *. –

+1

Bu açıkça mümkündür, ancak tavsiye edilir mi? Yan etkileri var mı? Diziyi tekrarlarken, yöntem yoluna girecek mi? Yöntem, Dizinin uzunluğunu alırken sayılır mı? – arkanciscan

cevap

30

Diziler nesnelerdir ve bu nedenle bu tür yöntemleri gibi özelliklere tutabilir: böyle de genişlemiş

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

Diziyi hemen yeni bir özellik oluşturun, yeni bir özellik oluşturun ve mülke yeni bir anonim işlev atayın.

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

someArray.someMethod(); // should alert 
7

Evet, kolay yapmak:

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

.. IE dışında: p ~ –

+1

IE hakkındaki yorum birkaç sürüm önceydi, hala geçerli mi? – 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; 
} 

onu öylesine yapar Yöntemi, aldıktan sonra doğrudan erişebilirsiniz.
yani

Bu zaten birden çok kez cevaplanması etti
var chart = drawChart(); 
chart.redraw(); 
+0

Bu cevabın daha fazla upvotes almadığını hayal kırıklığına uğrattım. Bu, OP'ye hitap eden tek örnektir: dönüş sonucunda ** ilgili işlevin ** nasıl yerleştirileceği **. (Olduğu gibi, bu tam olarak bilmem gereken şeydi. Teşekkürler, @Aust!) –

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

Bu kod soruyu yanıtlayabilirken, sorunun nasıl ve/veya neden çözüldüğüne dair ek bağlam sağlayarak yanıtın uzun vadeli değerini artıracaktır. . –