[JavaScript] Propriété "length" d'un objet String: pourquoi?

Bonjour à tous

Pour connaître la taille d’une chaîne de caractères en JavaScript, on utilise la propriété “length” de l’objet. Typiquement :

<script> var txt = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; document.getElementById("demo").innerHTML = txt.length; </script>

Or, comme je débute en programmation orientée objet, j’aurais plutôt naturellement utilisé une méthode qu’une propriété, de cette façon :

<script> var txt = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; document.getElementById("demo").innerHTML = txt.length(); </script>

Donc question : pourquoi est-ce qu’on utilise une propriété plutôt qu’une méthode ? J’avais cru comprendre qu’une propriété avait une valeur définie (qui peut être modifiée, mais qui est fixe le temps qu’on ne la change pas explicitement), tandis qu’une méthode va exécuter du code pour renvoyer une valeur qu’elle va calculer. Raison pour laquelle j’aurais utilisé une méthode et que je ne comprends pas comment la propriété “length” peut être modifiée à la volée à chaque fois que je modifie la taille de la chaîne de caractères.

Est-ce qu’une personne calée en orienté objet saurais m’éclairer ?

Merci beaucoup

ça n’a pas vraiment de rapport avec le fait que c’est de l’objet ou non; c’est une convention de notation de la part de JavaScript. Je ne pense pas qu’il y ait une raison objective de ne pas avoir fait de méthode, les créateurs de JavaScript ont du se dire que c’était inutile sur une property (en lecture seule si je me souviens bien)

salut,

un objet de type String en JavaScript est dit immuable (immutable en anglais), sa valeur ne peut plus changer après son instanciation.
d’ailleurs tu peux constater qu’il n’y a aucune méthode permettant de modifier le contenu dans l’API de String.

Merci pour vos 2 réponses.

[quote]un objet de type String en JavaScript est dit immuable (immutable en anglais), sa valeur ne peut plus changer après son instanciation.
d’ailleurs tu peux constater qu’il n’y a aucune méthode permettant de modifier le contenu dans l’API de String.[/quote]
Donc, lorsque je modifie le contenu de la chaîne de caractères, que se passe-t-il ? Comment la propriété est mise à jour ? Est-ce à dire qu’on crée une nouvelle instance à partir de la première (qui est donc différente tant par son contenu que par sa propriété “length”), et qu’on détruit l’instance d’origine ?

comment ? :wink:

comment ? :wink:[/quote]
Par exemple comme ça ?

[code]

[/code]

ce que tu fais n’a rien à voir avec une modification d’objet, tu crées simplement un nouvel objet et tu affectes sa référence à une variable déjà existante.

l’objet qui était associé à la chaîne “ABCDEFGHIJKLMNOPQRSTUVWXYZ” est donc perdu lorsque tu l’écrases avec la référence de l’objet associé à la chaîne “AAA”.
et ça n’a rien à voir avec le fait que ce soit une String par ailleurs, tu peux tout à fait écrire txt = 123; par exemple, la variable txt sera désormais associée à un objet de type Number.