javascript中的继承,变量在;“家长”;

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++) {

我第一次做OOJavaScript。我读过关于继承和原型的书,认为我已经破解了它。直到我发现了这个小例子

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();
    }
}