继承--没看懂
https://www.cnblogs.com/ranyonsue/p/11201730.html
1.构造函数继承:2句话没看懂
无法实现构造函数的复用。(每次用每次都要重新调用)
每个新实例都有父类构造函数的副本,臃肿
2.组合模式继承:1句话没看懂
子类的构造函数会代替原型上的那个父类构造函数
3.四五六什么时候会讲解到
正在回答
同学你好,先看例子
<script> //父类:人 function Person() { this.head = '脑袋瓜子'; this.emotion = ['喜', '怒', '哀', '乐']; //人都有喜怒哀乐 } //将 Person 类中需共享的方法放到 prototype 中,实现复用 Person.prototype.eat = function() { console.log('吃吃喝喝'); } Person.prototype.sleep = function() { console.log('睡觉'); } Person.prototype.run = function() { console.log('快跑'); } //子类:学生,继承了“人”这个类 function Student(studentID) { this.studentID = studentID; Person.call(this); // 第二次调用Person() } Student.prototype = new Person(); // 第一次调用Person() Student.prototype.constructor = Student; //将 Student 原型对象的 constructor 指针重新指向 Student 本身 var stu1 = new Student(1001); console.log(stu1.emotion); //['喜', '怒', '哀', '乐'] stu1.emotion.push('愁'); console.log(stu1.emotion); //["喜", "怒", "哀", "乐", "愁"] var stu2 = new Student(1002); console.log(stu2.emotion); //["喜", "怒", "哀", "乐"] stu1.eat(); //吃吃喝喝 stu2.run(); //快跑 console.log(stu1.constructor); //Student </script>
在第一次调用Person构造函数时,Person.prototype会得到两个属性:head和emotion,他们都是Person的实例属性。只不过这个时候位于Student的原型中,当调用Student构造函数时,又会调用一次Person构造函数,这一次又在新对象上创建了实例属性head和emotion,于是,这两个属性就屏蔽了原型中的两个同名属性。结果是,有两组head和emotion属性,一组在Student的实例上,一组在Student的原型上。结合代码再理解一下。
祝学习愉快!
同学你好,老师是希望你提问的时候,能够截图标注是哪句话,否则,一大篇博客,老师得从头一个字一个字的匹配同学说的问题,这样效率会很慢,同学也就很难得到快速的解答,现关于同学的问题解答如下:
1、课程中讲解到的知识点
(1)原型链继承https://class.imooc.com/lesson/791#mid=19904
(2)构造函数继承https://class.imooc.com/lesson/791#mid=19908
(3)寄生组合式继承因为需要使用call和apply方法,因此在call和apply的方法中会涉及一些https://class.imooc.com/lesson/791#mid=19912
(4)原型式继承和寄生式继承因为无法实现复用,不符合企业代码开发的标准,因此没有讲解。
2、构造函数继承:2句话没看懂
(1)无法实现构造函数的复用。(每次用每次都要重新调用)
(2)每个新实例都有父类构造函数的副本,臃肿
解析:这种形式的继承,每个子类实例都会拷贝一份父类构造函数中的方法,作为实例自己的方法, 每个实例都拷贝一份,占用内存大,尤其是方法过多的时候,函数复用就无从谈起,本来用prototype 就是解决复用问题的。这种形式的继承,方法都作为了实例自己的方法,当需求改变,要改动其中的一个方法时,之前所有的实例,他们的该方法都不能及时作出更新,只有后面的实例才能访问到新方法。
3、组合模式继承:1句话没看懂
(1)子类的构造函数会代替原型上的那个父类构造函数
解析:关于这个问题,先来看一个例子
上述代码通过SuperType.call(this, name);继承父类型的属性,通过SubType.prototype = new SuperType();继承父类型的方法。但是可以看到,以上代码中,在继承方法的时候实际已经继承了父类型的属性,只不过此时对于引用类型属于共享的,因此在子类型的构造函数内再次调用父类型的构造函数,从而继承了父类型的属性而去覆盖了原型中所继承的属性(子类的构造函数会代替原型上的那个父类构造函数)
如果我的回答帮助了你,希望采纳,祝学习愉快!
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星