J'apprends le javascript orienté objet, à partir de Object Palyground

Selon le tutoriel, la fonction elle-même est considérée comme un objet et je sais que vous pouvez obtenir les propriétés d'un objet en utilisant le mot-clé dans en javascript

var obj = {a:"hello",b=123};
for(var prop in obj)
alert(var);

Le code ci-dessus me donne les clés présentes dans l'objet de fonction obj comme prévu

Mais quand j'utilise le même code pour cette situation

var funObj = function(a,b){
   alert("hello");
}
for(var prop in funObj)
alert(prop);

Ou dans ce cas même

function myFunction(a,b){
 alert("hello");
}
for(var prop in myFunction)
alert(prop);

Cela ne me donne aucune sortie, idéalement selon le tutoriel, l'objet fonction devrait comprendre trois propriétés qui sont: nom, longueur et prototype mais je n'en reçois aucune, où je me trompe

Veuillez m'aider

1
Siddarth 16 juil. 2015 à 20:31

3 réponses

Meilleure réponse

où je me trompe

for...in itère uniquement sur les propriétés énumérables . Les propriétés par défaut des objets natifs sont souvent non énumérables.

Vous pouvez utiliser Object.getOwnPropertyNames pour obtenir une liste des propriétés de l'objet fonction:

> Object.getOwnPropertyNames(function() {})
["length", "name", "arguments", "caller", "prototype"]

Ou si vous souhaitez simplement inspecter les propriétés à des fins d'apprentissage, utilisez console.dir pour enregistrer la fonction:

enter image description here

4
Felix Kling 16 juil. 2015 à 17:38

Un Function en JavaScript peut être appelé "première classe" car c'est un objet appelable ce qui signifie que c'est un objet avec une sémantique appelable ajoutée. À certains égards, un Array en JavaScript est similaire à un Function en ce qu'ils sont tous les deux des objets mais ont des fonctionnalités spéciales incluses. REMARQUE: une déclaration courante à propos de JavaScript est que "tout est un objet" mais ce n'est pas vrai cependant. Aucune des primitives simples (string, boolean, number, null et undefined) et undefined) n'est un objet (bien que JS ne quelques astuces astucieuses si vous essayez de les traiter comme tels).

var obj = {bar: 'hi'};
Object.keys(obj); // ["bar"]

function func() {}
Object.keys(func); // []
func.bar = 'hello';
Object.keys(func); // ["bar"];

var arr = [1, 2, 3];
Object.keys(arr); // ["0", "1", "2"]
arr.bar = 'hey';
Object.keys(arr); // ["0", "1", "2", "bar"]

bar apparaît dans les trois car ces propriétés sont définies pour être énumérable par défaut. Cependant, comme vous l'avez noté, une fonction possède d'autres propriétés, mais celles-ci n'apparaissent pas. Pourquoi? Regardons d'abord obj.

obj.propertyIsEnumerable('bar'); // true

bar par défaut était défini sur enumerable.

Voyons maintenant bar dans func.

func.propertyIsEnumerable('bar'); // true

Cela explique donc pourquoi bar apparaît pour func mais qu'en est-il de name?

func.propertyIsEnumerable('name'); // false

Ah ah! Ce n'est pas énumérable. Cela est vrai pour de nombreuses propriétés / méthodes qui sont automatiquement liées ou attribuées à un objet via le moteur JavaScript. Par exemple, la propriété length d'un objet tableau.

arr.propertyIsEnumerable('length'); // false

Cela dit, si vous êtes nouveau sur JS, je vous recommande fortement de lire la série You Don't Know JS par Kyle Simpson. Il est destiné aux personnes ayant une certaine expérience en programmation, mais elles sont très utiles pour apprendre ce qu'est JS et ce qu'il n'est pas (peu importe la quantité de sucre syntaxique empilée). Je recommanderais surtout de se concentrer sur le point clé de la différence entre l'héritage classique et le OLOO (Objets liant à d'autres objets) ).

Le livre d'introduction Up & Going est une lecture rapide qui couvre les bases de ce que la série entière plongera plus profondément dans. Le reste de la série (jusqu'à présent) comprend: Types et grammaire , Portées et fermetures , this & Object Prototypes , Async et performances et ES6 et au-delà . Vous pouvez également les prévisualiser tous sur son référentiel github.

OU Vous pouvez également consulter la documentation de MDN pour Travailler avec des objets pour de très bonnes informations.

0
Community 23 mai 2017 à 11:58
var obj = {a:"hello",b=123};

Sinon le même que

var obj = function(a, b) {}

Si vous voulez que A et B soient des propriétés, vous devez le faire de cette façon:

var obj = function(a, b) {
   this.a = a;
   this.b = b;
}

De cette façon, obj.a et obj.b ont un peu plus de sens, mais pas encore beaucoup. function () {} est votre constructeur. Vous devez donc réellement créer une instance afin de l'utiliser correctement.

var myObj = new obj('value for a', 'value for b');
for (var prop in myObj) {
   // Prop = a || b
   console.log(prop);

   // Values for a and b
   console.log( myObj[ prop ] );
}

Si vous l'utilisez de manière statique, vous n'avez PAS à faire la fonction. De plus, cet objet n'a pas la méthode de longueur. Les tableaux font.

Pour rendre cela VRAIMENT SIMPLE et totalement inexact, {} (les objets) sont un peu statiques et la fonction () {} est instanciable (ce mot existe-t-il même?), Ce qui signifie que vous pouvez utiliser le "nouveau" et donc bénéficier de la constructeur de fonction.

Tout cela est vraiment technique et il semble que vous commenciez par Javascript. Dites-moi si je ne suis pas clair ou si vous avez besoin de précision.

J'espère que cela pourra aider.

0
Bene 16 juil. 2015 à 17:46