zoukankan      html  css  js  c++  java
  • 寄生组合式继承方法的实现以及原理总结

    学习js也有将近两年时间了吧,回头想想真的是犯了很多错。太急躁,太急功近利了。这不最近只能亡羊补牢了。重新好好的,一点一点的复习了js的知识点。公司天天加班,但是回来研究源生js感觉就像做按摩一样放松,这两天把面向对象的创建对像和继承学习了下。下面做个总结。希望大家批评指导啊。

    首先说到继承:我们为什么要实现继承?我个人认为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上也同样修改了。
  • 相关阅读:
    POJ 3261 Milk Patterns (求可重叠的k次最长重复子串)
    UVaLive 5031 Graph and Queries (Treap)
    Uva 11996 Jewel Magic (Splay)
    HYSBZ
    POJ 3580 SuperMemo (Splay 区间更新、翻转、循环右移,插入,删除,查询)
    HDU 1890 Robotic Sort (Splay 区间翻转)
    【转】ACM中java的使用
    HDU 4267 A Simple Problem with Integers (树状数组)
    POJ 1195 Mobile phones (二维树状数组)
    HDU 4417 Super Mario (树状数组/线段树)
  • 原文地址:https://www.cnblogs.com/hjdjs/p/6272006.html
Copyright © 2011-2022 走看看