Я делаю OO Javascript в первый раз. Я читал о наследовании и прототипе и думал, что взломал его. Пока я не обнаружил этот маленький пример.
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();
}
}
Если я сделаю следующее:
var foo = new TestObject2([1,2,3,4]);
foo.dothings();
var bar = new TestObject2([4,5,6]);
bar.dothings();
Я ожидаю, что консоль покажет:
Testing Object Values, []
Testing Object Values, []
Однако это показывает:
Testing Object Values, []
Testing Object Values, [1,2,3,4]
Проблема, конечно, в этом вызове:
TestObject2.prototype = new TestObject();
Как заставить родительские переменные в TestObject «сбрасывать», кроме как вручную сбрасывать их в методе __construct?
Есть ли другой способ TestObject2 унаследовать все значения / методы от TestObject и заставить «new» вести себя так, как я ожидал бы в PHP OO? (Я уверен, что способ, которым JS делает это, действительно очень странный, как будто мой мозг правильно обслуживает меня из университета. В этом отношении Java работает как PHP) *