Je suis très confus avec les méthodes javascript définies dans les objets et le mot clé "this".objet littéral de la fonction constructeur renvoie la méthode toString() mais aucune autre méthode
Dans l'exemple ci-dessous, la méthode toString() est appelée lorsque l'objet des mammifères instancié:
function Mammal(name){
this.name=name;
this.toString = function(){
return '[Mammal "'+this.name+'"]';
}
}
var someAnimal = new Mammal('Mr. Biggles');
alert('someAnimal is '+someAnimal);
Malgré le fait que la méthode toString() n'est pas invoqué le someAnimal objet comme celui-ci:
alert('someAnimal is '+someAnimal.toString());
Il retourne toujours 'someAnimal is [Mammal "M. Biggles"]'. Cela n'a aucun sens car la fonction toString() n'est appelée nulle part.
Puis pour ajouter encore plus de confusion, si je change la méthode toString() à une méthode que je me maquille comme le hasard():
function Mammal(name){
this.name=name;
this.random = function(){
return Math.floor(Math.random() * 15);
}
}
var someAnimal = new Mammal('Mr. Biggles');
alert(someAnimal);
Il ignore complètement la méthode aléatoire (en dépit du fait que est défini de la même manière que la méthode toString() était) et retourne: [object object]
Un autre problème que j'ai de la difficulté à comprendre avec l'héritage est la valeur de "this". Par exemple, dans l'exemple ci-dessous
function person(w,h){
width.width = w;
width.height = h;
}
function man(w,h,s) {
person.call(this, w, h);
this.sex = s;
}
Ce mot clé est envoyé clairement à l'objet Personne. Cependant, est-ce que "ceci" fait référence à la sous-classe (homme) ou à la super classe (personne) quand l'objet personne la reçoit?
Merci d'avoir éliminé la confusion que j'ai avec l'héritage et les littéraux d'objets en javascript.
'toString' est une méthode spéciale. Il est implicitement appelé pour obtenir une représentation sous forme de chaîne de l'objet lorsque cela est requis comme dans l'appel 'alert'. 'random 'est juste une méthode que vous avez créée et qui n'a pas de sens ou de traitement particulier, donc rien n'est fait. – Anurag