Robię OO javascript po raz pierwszy. Czytałem o dziedziczeniu i prototypie i myślałem, że je złamałem. Aż odkryłem ten mały przykład.Dziedziczenie w javascript, zmienne w "nadrzędnym"
function TestObject(data)
{
this.test_array = [];
this.clone_array = [];
this.dosomestuff = function()
{
for(var i=0; i<this.test_array.length; i++)
{
this.clone_array[i]=this.test_array[i];
}
}
this.__construct = function(data)
{
console.log("Testing Object Values" ,this.clone_array);
this.test_array = data;
};
}
TestObject2.prototype = new TestObject();
function TestObject2(data)
{
this.__construct(data);
this.dothings = function()
{
this.dosomestuff();
}
}
Gdybym wykonaj następujące czynności:
var foo = new TestObject2([1,2,3,4]);
foo.dothings();
var bar = new TestObject2([4,5,6]);
bar.dothings();
spodziewałbym konsola do pokazania:
Testing Object Values, []
Testing Object Values, []
Jednak to pokazuje:
Testing Object Values, []
Testing Object Values, [1,2,3,4]
Problemem jest oczywiście to połączenie:
TestObject2.prototype = new TestObject();
W jaki sposób uzyskać zmienne nadrzędne w TestObject, aby "zresetować" inne niż ręczne resetowanie ich w metodzie __construct?
Czy istnieje inny sposób na testObject2 dziedziczenia wszystkich wartości/metod z TestObject i dla "nowych" zachowywać się tak, jak bym się spodziewał w trybie PHP OO? (Jestem pewien, że sposób, w jaki robi to JS, jest naprawdę naprawdę dziwny, jak gdyby mój mózg służył mi poprawnie z University Java działa jak PHP w tym zakresie)
Demo tutaj: http://jsbin.com/olino3 – johnwards