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上也同样修改了。
  • 相关阅读:
    第一节
    20150506--不重复的随机(备忘)
    20150506—WinForm自动生成按钮&按钮拖动
    20150414---ListView简介(web)
    20150410---GridView分页(备忘)
    添加图片
    20150311—html中iframe(转发)
    20150323--MVC
    20150320--安全性,Membership类
    20150317--委托、代理
  • 原文地址:https://www.cnblogs.com/hjdjs/p/6272006.html
Copyright © 2011-2022 走看看