La page de référence de l'API indique:
Une portée peut hériter d'une portée parent.
La page du manuel du développeur dit:
Une étendue (de manière prototypique) hérite des propriétés de sa portée parent.
Ainsi, une portée enfant hérite-t-elle toujours de manière prototypique de sa portée parent? Y a-t-il des exceptions? Quand il hérite, est-ce toujours un héritage prototypal JavaScript normal?
Je ne veux en aucun cas rivaliser avec la réponse de Mark, mais je voulais simplement mettre en valeur la pièce qui a finalement fait que tout clique comme quelqu'un de nouveau pour héritage Javascript et sa chaîne de prototypes .
Seule la lecture de propriété effectue une recherche dans la chaîne de prototypes, pas d'écriture. Ainsi, lorsque vous définissez
myObject.prop = '123';
Il ne regarde pas la chaîne, mais lorsque vous définissez
myObject.myThing.prop = '123';
Il y a une lecture subtile dans cette opération d'écriture qui tente de rechercher myThing avant d'écrire sur son accessoire. C’est pourquoi l’écriture sur object.properties de l’enfant a pour objet les objets du parent.
J'aimerais ajouter un exemple d'héritage prototypique avec javascript à @Scott Driscoll answer. Nous allons utiliser un modèle d'héritage classique avec Object.create (), qui fait partie de la spécification EcmaScript 5.
Nous créons d'abord la fonction d'objet "Parent"
function Parent(){
}
Ajoutez ensuite un prototype à la fonction d'objet "Parent"
Parent.prototype = {
primitive : 1,
object : {
one : 1
}
}
Créer une fonction d'objet "Enfant"
function Child(){
}
Affecter un prototype enfant (Faire en sorte que le prototype enfant hérite du prototype parent)
Child.prototype = Object.create(Parent.prototype);
Affecter le constructeur de prototype "Enfant" approprié
Child.prototype.constructor = Child;
Ajoutez la méthode "changeProps" à un prototype enfant, qui réécrira la valeur de la propriété "primitive" dans un objet enfant et modifiera la valeur "object.one" dans les objets enfant et parent
Child.prototype.changeProps = function(){
this.primitive = 2;
this.object.one = 2;
};
Initiez les objets parent (papa) et enfant (fils).
var dad = new Parent();
var son = new Child();
Appelez la méthode changeProps de l'enfant (fils)
son.changeProps();
Vérifiez les résultats.
La propriété primitive parent n'a pas changé
console.log(dad.primitive); /* 1 */
Propriété primitive enfant modifiée (réécrite)
console.log(son.primitive); /* 2 */
Propriétés object.one parent et enfant modifiées
console.log(dad.object.one); /* 2 */
console.log(son.object.one); /* 2 */
Exemple de travail ici http://jsbin.com/xexurukiso/1/edit/
Plus d'infos sur Object.create ici https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Object/create