美文网首页javaScript学习
父类属性中有对象的情况下继承该如何正确的实现

父类属性中有对象的情况下继承该如何正确的实现

作者: 大发明家ccc | 来源:发表于2017-03-10 10:02 被阅读17次

这个问题坑了我大半天。调bug调的心力交瘁。

起因是在做一个生成问卷的项目,其中涉及到各个题型类的继承,这里用一个简单的例子来说明。

好了,上代码:

先定义一个父类Animal:

function Animal(){

    this.name = new Array();

}

接着是子类Dog:

function Dog(){}

Dog.prototype = new Animal();    //继承Animal

类定义完成后,新建2个Dog实例:

var tony = new Dog();

tony.name.push("tony");

var jessy = new Dog();

jessy.name.push("jessy");

console.info(jessy.name);

猜猜这里会输出啥?

原本以为是包含"jessy"的数组,结果没想到是["tony","jessy"]。

再看一个实例,这次新建2个Animal的实例:

var animal1 = new Animal();

var animal2 = new Animal();

animal1.name.push("animal1");

animal2.name.push("animal2");

console.info(animal2.name);

这里却是输出了 "animal2"!!!!!

后来联系上new的具体原理也就想明白了,new返回一个Animal实例,Dog的原型链指向这个Animal实例。

结果后来无论多少个new Dog(),也不会new Animal(),因此所有的Dog实例实在共享一个数组属性的。

结论也很简单:在继承时,如果父类属性中有对象,最好在子类中重新声明一遍。

另外一种做法也可以是父类在另外的函数中重新声明这个属性,但这样并不好。

相关文章

  • 父类属性中有对象的情况下继承该如何正确的实现

    这个问题坑了我大半天。调bug调的心力交瘁。 起因是在做一个生成问卷的项目,其中涉及到各个题型类的继承,这里用一个...

  • js继承

    1.通过构造函数(call) 优点: 可以实现多继承(call多个父类对象)缺点: 只能继承父类的实例属性和方法,...

  • day16-课后总结

    面向对象 1.类的继承 a.什么是继承父类(超类):被继承的类子类:去继承父类的类继承就是然子类直接拥有父类的属性...

  • Android

    面向对象: 封装:隐藏实现细节,提高程序的复用性和维护性 继承:子类继承父类,表明子类拥有父类的属性和方法(注意是...

  • js中的继承

    要使一个子类继承父类,需要两步实现:第一:继承父类自身的属性和方法第二:继承父类原型上的方法 "父类自身"属性和方...

  • es5继承

    继承 ES5的继承也都是通过借用父类的构造方法来实现父类方法/属性的继承: // 父类 functionsupFa...

  • 继承与派生

    1,父类与子类,单继承与多继承 2、为何要用继承:用来解决类与类之间代码冗余问题 3,如何实现继承 4,属性查找 ...

  • 理解对象继承

    对象继承 什么是继承 继承可以使得子类具有父类的属性和方法或者重新定义、追加属性和方法 实现继承就需要完成两件事 ...

  • JS实现继承的方式

    1. 属性拷贝(混入式继承) 问题:如果父对象中有引用类型(以下示例中的friend属性)的属性,子对象和父对象的...

  • 装饰者模式

    Source:被装饰对象Decorator:装饰者父类,继承Source。该对象中有一个source实例Decor...

网友评论

本文标题:父类属性中有对象的情况下继承该如何正确的实现

本文链接:https://www.haomeiwen.com/subject/kprngttx.html