2010-12-08 5 views
6
var c=$('<canvas></canvas>')[0].getContext('2d') 
for(m in c){console.log(m)} 

Ceci imprime une liste de méthodes dans CanvasRenderingContext2D. Comment puis-je faire la même chose pour un tableau. Je veux obtenir "splice", "pop", "push", etc. Evidemment for(m in Array.prototype){console.log(m)} ne fonctionnera pas.obtenir la liste des méthodes dans le tableau de JavaScript

Répondre

13

La plupart des méthodes et des propriétés des objets intégrés sont marquées en interne comme non énumérables, elles ne seront donc pas énumérées dans une boucle for-in.

ECMAScript 5 a une méthode Object.getOwnPropertyNames qui retourne un tableau de tous les noms de propriété, de sorte que vous pouvez faire:

Object.getOwnPropertyNames(Array.prototype) 

mais ce n'est pas pris en charge par tous les navigateurs encore.

1

Je n'ai aucune idée de comment le faire avec plaine js. J'ai l'habitude underscorejs chargés ant-il un il ont une fonction qui renvoie toutes les fonctions d'un objet

http://documentcloud.github.com/underscore/#functions

Vous pouvez vérifier underscorejs code pour vérifier comment ils le font.

2

Faites ceci:

for (m in Array) { 
    console.log(m) 
} 

Sortie:

from 
type 
implement 
extend 
alias 
mirror 
$family 
$constructor 
pop 
push 
reverse 
shift 
sort 
splice 
unshift 
concat 
join 
slice 
indexOf 
lastIndexOf 
filter 
forEach 
every 
map 
some 
reduce 
reduceRight 
each 
clone 
invoke 
clean 
associate 
link 
contains 
append 
getLast 
getRandom 
include 
combine 
erase 
empty 
flatten 
pick 
hexToRgb 
rgbToHex 
overloadSetter 
overloadGetter 
hide 
protect 
apply 
call 
attempt 
pass 
delay 
periodical 
create 
bind 
bindWithEvent 
run 
+0

Ce n'est pas la même chose que d'obtenir les propriétés sur une instance Array/prototype, cependant, qui sont non dénombrable. Par coïncidence, de nombreuses propriétés 'Array.x' sont nommées comme les propriétés' Array.prototype.x'. – bobince

+0

Où avez-vous obtenu cette sortie de toute façon? Cela ne fonctionne pas pour moi sur FF4. La seule propriété standard de 'Array' est' Array.isArray' et cela est encore une fois non énumérable. – casablanca

+0

Vous voudrez peut-être ajouter 'if (typeof m === 'function')' à cela, donc vous obtenez seulement des fonctions. –

Questions connexes