Je serais en désaccord. Il n'est pas nécessaire de définir le prototype. Prendre l'exacte même code, mais retirer le prototype.constructeur de la ligne. Ne rien changer? Pas de. Maintenant, apportez les modifications suivantes:
Person = function () {
this.favoriteColor = 'black';
}
Student = function () {
Person.call(this);
this.favoriteColor = 'blue';
}
et à la fin de l'essai le code...
alert(student1.favoriteColor);
La couleur est bleu.
Un changement pour le prototype.constructeur, dans mon expérience, ne pas le faire, sauf si vous êtes en train de faire très spécifique, très compliqué les choses qui ne sont probablement pas une bonne pratique de toute façon :)
Edit:
Après avoir farfouillé sur le web pour un peu et faire quelques essais, ça ressemble à des personnes définir le constructeur afin qu'il "regarde" comme la chose qui est en cours de construction avec les "nouveaux". Je suppose que je dirais que le problème c'est que javascript est un prototype de la langue - il n'y a pas une telle chose comme l'héritage. Mais la plupart des programmeurs qui viennent d'un milieu de programmation qui pousse l'héritage comme "le chemin". Nous arrivons donc avec toutes sortes de choses à essayer et à faire de ce prototype de la langue "classique" de la langue.. comme l'extension des "classes". Vraiment, dans l'exemple qu'ils ont donné, un nouvel élève est une personne - il n'est pas "étendre" à partir d'un autre étudiant.. l'étudiant est tout au sujet de la personne, et quelle que soit la personne est l'étudiant est ainsi. Étendre l'étudiant, et tout ce que vous avez prolongé est un étudiant au coeur, mais est personnalisé pour répondre à vos besoins.
Crockford est un peu fou et les excès de zèle, mais faire un peu de sérieux de lecture sur certaines des choses qu'il écrit.. il fera de vous regarder ce genre de choses très différemment.