我是第一次做 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();
除了在 __construct 方法中手动重置它们之外,如何让 TestObject 中的父变量“重置”?
TestObject2 是否有另一种方法可以从 TestObject 继承所有值/方法,并让“新”以 PHP OO 方式表现得像我期望的那样?(我确信 JS 这样做的方式真的很奇怪,就好像我的大脑从大学里正确地为我服务一样 Java 在这方面就像 PHP 一样工作)