« Programmation JavaScript/Variables » : différence entre les versions

Contenu supprimé Contenu ajouté
Touffy (discussion | contributions)
Touffy (discussion | contributions)
Ligne 212 :
* indirectement pour les objets du DOM (et on ne peut pas utiliser '''new''' avec eux)
 
L'instanciation explicite d'un objet grâce à un constructeur s'effectue avec [[../Opérateurs#Instanciation (new)|l'opérateur '''new''']].
<source lang="javascrip">
<pre>
t = new Array();
alert(typeof t) // Affiche "object"
</presource>
 
Les expressions littérales de chaînes, nombres et booléens créent des variables scalaires alors que le constructeur de ces types crée un objet (explicitement de type '''object''' et donc strictement différents d'une valeur scalaire équivalente). Mais les expressions littérales de fonctions, tableaux et expressions rationnelles créent des objets, car ce ne sont pas des types scalaires. Ces objets, instanciés sans utilisation de '''new''', sont néanmoins strictement identiques à leur équivalent produit par l'appel d'un constructeur. Par exemple :
 
<source lang="javascrip">
<pre>
// valeur scalaire vs. objet
"chaîne" !== new String("chaîne")
Ligne 228 :
["a", "b", "c"] === new Array("a", "b", "c")
/(\w+) ?\(/i === new RegExp("(\w+) ?\(", "i")
</presource>
 
On peut créer un objet générique (qui sera simplement une instance de la "classe" [[../Object|'''Object''']]) avec la notation littérale. Cela consiste à écrire, entre accolades, une liste de couples clé : valeur séparés par des virgules, la clé pouvant être un identifiant ou bien une chaîne, et la valeur pouvant être n'importe quelle valeur. La clé et la valeur sont séparés par deux points (':').
 
<source lang="javascrip">
<pre>
objetLitteral = {
nom : "Mac OS X",
Ligne 238 :
"nom de code" : "Leopard"
}
</presource>
Attention, dans l'exemple ci-dessus, on ne pourra accéder à la dernière propriété ("nom de code") de l'objet qu'avec la notation tableau (avec des crochets), pas la notation objet (avec des points) car ce n'est pas un identifiant valide (il y a des espaces dedans).
 
Le DOM (aussi bien W3C que IE) définit certaines "classes" : HTMLElement, HTMLTextNode, HTMLDocument, CSSRuleSet, CSSRule, etc. On doit utiliser les méthodes du DOM (comme document.createElement()) pour instancier ces objets (le "DOM 0" fait exception à cette règle et à bien d'autres).
 
Les autres "classes" d'objets ne peuvent être créés que par un constructeur. Il y a des constructeurs natifs tels que [[../Date|'''Date''']], et on peut définir un constructeur soi-même. Pour plus de détails, voir le chapitre consacré aux objets.
 
=== function ===