2017-05-22 12 views
0

En JavaScript, les fonctions sont des objets de première classe, car ils peuvent avoir des propriétés et méthodes comme tout autre objet

Ref: Functionscomment obtenir les propriétés et les méthodes d'une fonction?


Par conséquent, comment obtenir les méthodes de fonction et les propriétés, en tant qu'objets simples peuvent attraper dans console.log(testObj), tous les détails iront dans la console du navigateur. Comme c'est le cas, comment obtenir la fonction Détails de l'objet.


Essayer d'obtenir les détails de la fonction:

function foo() { 
    var a = 2; 
    return a; 
}; 

console.log(foo); 

ci-dessus renvoie juste la signature, function foo().

Exemple: console.log(document);

+0

Je peux me tromper, il est juste une supposition donc je le jeter dans les commentaires 'pour (propriété var dans foo) {if (foo.hasOwnProperty (propriété)) {}}' est comment itérer à travers les propriétés d'un objet si vous voulez supporter IE <9 –

+0

Essayez 'console.log ('% O', foo);'. Le formateur ['% O'] (https://console.spec.whatwg.org/#formatter) (3.e) doit indiquer à la console d'afficher la fonction en tant qu'objet générique. –

+0

@ Le résultat de jonathan-lonowski est le même que ci-dessus, car vous ne faites que passer les arguments dans la console. –

Répondre

1

utilisation console.dir() en place de console.log().

console.dir(foo); 

qui indique la console pour afficher l'argument as a generic object, assurant qu'il est la liste avec ses propriétés et leurs valeurs, généralement comme une arborescence extensible.

  1. Soit un objet soit un objet avec generic JavaScript object formatting appliqué.

Dans les navigateurs supportant, le %O formatter donnera le même résultat.

console.log('%O', foo); 
+0

J'ai essayé 'console.log (foo.prototype)', s'il vous plaît vérifier et aussi l'ajouter à votre réponse! –

+1

@forweb Cela peut être utile si la fonction est utilisée comme constructeur pour d'autres objets, bien que votre question ne le suggère pas. En outre, le 'prototype' sera navigable depuis' console.dir (foo); '. –

2

Votre fonction n'a pas de propriété.

Pour obtenir les propriétés énumérables, vous pouvez utiliser Object.keys.

function foo() { 
 
    var a = 2; 
 
    return a; 
 
}; 
 
foo.bar = function (x) { console.log(x); }; 
 
foo.baz = 42; 
 

 
console.log(Object.keys(foo)); 
 
console.log(foo.toString());

Pour toutes les propriétés de document, vous pouvez utiliser une déclaration for ... in.

var k; 
 
for (k in document) { 
 
    console.log(k); 
 
}

+0

Remarque: 'Object.keys()' est défini dans ES5 et peut ne pas être utilisable dans certains navigateurs (quoique très obsolètes). Source: [Object.keys() MDN] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys) –

+0

@Nina Scholz, en effet, mais j'essaie pour obtenir tous les détails dans la console du navigateur, comme 'console.log (document)' toutes les méthodes, propriétés, etc, ... y va. –

+0

@ Nina-Scholz Eh bien je ne dis pas comment obtenir les propriétés une par une, je demande juste le comportement de 'console.log (document)' ou 'console.log (anyObject)', besoins avec des objets fonction. –

0

Pensez d'une fonction comme variable. Javascript vous donne l'ensemble déclaré lors de votre appel. Pour obtenir la variable, vous devez modifier la variable déclarée dans la fonction. Par exemple:

var a = 2; 
function foo(){ 
    a = 4; 
} 
console.log(a); //would give you the desired result.