2010-09-08 4 views
4

Pourquoi est-ce que je peux faire ce qui suit en javascript:propriétés de la fonction Javascript

function a() {}; 
a.foo = 30; 

Plus précisément, pourquoi puis-je définir une propriété sur la fonction d'un? Après tout, je ne peux pas le faire:

var a = 20; 
a.foo = 30; 

Répondre

6

Vous ne pouvez vraiment pas faire cela parce qu'il est une erreur de syntaxe

function a = function() {}; 

Je suppose que vous voulez simplement dire:

function a() {} 

Quoi qu'il en soit . La raison pour laquelle vous ne pouvez pas extraire une propriété d'un nombre est que ce n'est pas un objet réel.

a = 20; 
a.foo = 30; // this works 
alert(a.foo); // this alerts nothing 

Croyez-le ou non, la même chose pour les chaînes:

a = "ohai"; 
a.foo = 30; // this works 
alert(a.foo); // this alerts nothing 

Cependant si elle est objet String, il fonctionne comme prévu:

a = new String("ohai"); 
a.foo = 30; // this works 
alert(a.foo); // this alerts 30 

Ou si elle est un objet Numéro . Tu obtiens le point.

Les littéraux de chaîne et de nombre ne sont pas des objets en Javascript. C'est la raison.

0

Les fonctions javascript sont des objets. Ou ils héritent d'objets, ou de quelque chose.

essayer de faire

a = function(){}; 
alert(typeof a.prototype); 
4

En JavaScript point (.) opérateur attend sa valeur reste à un objet. Et en JavaScript, les fonctions sont des objets.

Fondamentalement, en JavaScript, il y a quatre types de données:

  1. Numéro
  2. Chaîne
  3. Boolean
  4. objet

objets englobe les fonctions, tableaux, objets de date , et (faute d'un meilleur mot) régulier objets. L'objet fonction est unique en ce sens qu'il contient code exécutable et peut être appelé. Les numéros sont des primitives, et vous ne pouvez donc pas accéder/assigner des propriétés de/à partir d'eux.

+0

il y a des tableaux trop ... ils ont des prototypes natifs d'objets (notez qu'un tableau retourne un typeof comme un objet, mais si vous vérifiez son constructeur vous verrez qu'il est en fait 'Array') . –

+0

@Peter: Toujours, les tableaux sont des objets. La norme ECMA définit "Objets tableau", "Objets fonction", ... et "Objets objet" – user123444555621

+0

@Pumbaa - Merci. Cela explique le 'typeof'. –

2

En Javascript, une fonction est un objet, vous pouvez définir les propriétés sur elle:

function a() {}; 
a.foo = 30; 
a.foo; // evaluates to 30 

cependant un littéral crée une valeur primitive (qui n'a pas de propriétés) et non un objet .

a = 20;  // Create primitive value using number literal 

Lorsque vous définissez une propriété sur une valeur primitive, en fait, vous créez un objet wrapper autour de la valeur primitive et définissez la propriété sur l'objet d'emballage, pas la valeur primitive. Lorsque vous lisez la propriété, vous créez à nouveau un objet wrapper dont la propriété n'est pas définie.

a.foo;     // wrapper object created, has no foo property 
(new Number(a)).foo;  // --> equivalent, evaluates to undefined 
Questions connexes