2
function A(){
this.a = {};
this.b = 0;
this.Test = function(value){
this.a.x = value;
this.b = value;
};
}
function B(){}
B.prototype = new A;
var b1= (new B());
b1.Test(1);
var b2= (new B());
b2.Test(2);
log(b1.b == 1); //true
log(b2.b == 2); //true
log(b1.a.x == 1);//false x == 2
log(b2.a.x == 2);//true
Pourquoi les instances partagent-elles le champ a?Champ JavaScript Héritage comportement étrange
> Cela se produit parce que l'un l'objet est partagé entre toutes les instances de B. Mais pourquoi cela fonctionne-t-il avec b field? Pourquoi l'objet est partagé mais les types simples non? – dotneter
@dotneter: 'a' est un objet, en faisant:' this.ax = valeur; 'vous modifiez l'objet hérité, partagé par toutes les instances, en assignant' this.b = valeur; 'vous créez une propriété dans l'objet courant ('this'), en ombrant l'héritage, tout comme dans mon exemple je fais' this.a = {x: valeur}; ', une nouvelle propriété est créée sur l'objet que' this' pointe vers. – CMS