开发者社区> 问答> 正文

寄生式组合继承的实现?

寄生式组合继承的实现?

展开
收起
请回答1024 2020-04-03 15:15:24 890 0
2 条回答
写回答
取消 提交回答
  • 有点尴尬唉 你要寻找的东西已经被吃掉啦!

    首先说到继承:我们为什么要实现继承?我个人认为1,减少代码,相同功能写一遍就好了,然后让子类继承就好了。2,方便维护,如果我要修改某个功能的实现方法,只在最高的那个父类修改了,其他类会随之修改。我们可以发现js的中的系统的一些类就是这样做的。那么我们来一块看看寄生组合继承的实现原理,

    类A作为父类,类B作为子类。--我们利用call使B继承A的私有方法,让B的原型等于A的原型,然后让B的原型的构造函数为B

    //给Object类的原型上增加一个兼容非标准浏览器的exCreate方法,实现和create方法一样的功能 Object.prototype.exCreate = function (obj) { function fn() { }; fn.prototype = obj; return new fn(); } //类A function A() { this.x = 100; } A.prototype.getX = function () { console.log(this.x); } //类B function B() { //实现继承类A的私有属性 A.call(this); } //实现类B的原型为类A的原型并且利用constructor使原型的构造函数为B B.prototype = Object.exCreate(A.prototype); B.prototype.constructor = B; var c = new B(); console.log(c);

    这个时候我们会发现,B已经继承A的一些属性和方法并且B的第一层 __proto__上可以增加新的原型方法,切不会影响第二层__protp__即A上的方法getX() 当我们修改A的原型上的getX时,B上也同样修改了。

    2020-04-03 22:13:06
    赞同 展开评论 打赏
  • function Person(name) { this.name = name; }

    Person.prototype.sayName = function() { console.log("My name is " + this.name + "."); };

    function Student(name, grade) { Person.call(this, name); this.grade = grade; }

    Student.prototype = Object.create(Person.prototype); Student.prototype.constructor = Student;

    Student.prototype.sayMyGrade = function() { console.log("My grade is " + this.grade + "."); };

    2020-04-03 15:16:56
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
继承与功能组合 立即下载
低代码开发师(初级)实战教程 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载