javascript中的继承,变量在;“家长”;
我第一次做OOJavaScript。我读过关于继承和原型的书,认为我已经破解了它。直到我发现了这个小例子javascript中的继承,变量在;“家长”;,javascript,inheritance,prototypal-inheritance,Javascript,Inheritance,Prototypal Inheritance,我第一次做OOJavaScript。我读过关于继承和原型的书,认为我已经破解了它。直到我发现了这个小例子 function TestObject(data) { this.test_array = []; this.clone_array = []; this.dosomestuff = function() { for(var i=0; i<this.test_array.length; i++) {
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();
}
}
我希望控制台显示:
Testing Object Values, []
Testing Object Values, []
然而,它表明:
Testing Object Values, []
Testing Object Values, [1,2,3,4]
问题当然是这个电话:
TestObject2.prototype = new TestObject();
如何让TestObject中的父变量“重置”,而不是在_构造方法中手动重置它们
TestObject2是否有另一种方法继承TestObject的所有值/方法,并使“new”以PHP OO的方式表现出我所期望的行为?(我确信JS这样做真的很奇怪,好像我的大脑从大学里正常工作一样Java在这方面的工作就像PHP一样)你是否已经尝试过定义
this.clone_array=[]改为将>编码到TestObject2中
function TestObject2(data)
{
this.clone_array = [];
this.__construct(data);
this.dothings = function()
{
this.dosomestuff();
}
}
我想
TestObject2.prototype = new TestObject();
正在重写TestObject2的构造函数
试一试
基本上
TestObject2.prototype = new TestObject();
在TestObject2的原型链中放置TestObject的单个实例。因此,TestObject2的任何实例都将修改TestObject中相同的单实例子代属性。如果将另一个console.log放到TestObject的构造函数中,您会注意到它只被调用一次
关于您的确切问题,可以找到更多详细信息
您需要从TextObject2的构造函数中调用TextObject的构造函数,如下所示:
function TestObject2(data)
{
TestObject.call( this, data);
this.__construct(data);
this.dothings = function()
{
this.dosomestuff();
}
}
通过调用TestObject构造函数并在(这是)新TestObject2对象的范围内执行它,它将在TestObject2对象中创建TestObject的所有元素。Demo这里:我的父对象中有30个变量。我在三个不同的班级中扩展家长。我必须将重置复制并粘贴到这30个类中。肮脏的我最好让他们重新设定。太好了,正是我想要的。也请投赞成票!Doh,忘记了对继承构造函数的调用。好眼力。
TestObject2.prototype = new TestObject();
function TestObject2(data)
{
TestObject.call( this, data);
this.__construct(data);
this.dothings = function()
{
this.dosomestuff();
}
}