• JavaScript的继承


    1.借用构造函数继承 call,apply(继承实例属性)

    function Parent(sName,nAge){
        this.sName = sName;
        this.nAge = nAge;
    }
    
    function Child(sName,nAge,sSex){
        //Parent.call(this,sName,nAge);
        Parent.apply(this,[sName,nAge]);
        this.sSex = sSex;
    }

    2.原型继承

    利用空函数做中介(YUI做法)

    //ES3
    function fExtend(Child,Parent){
        var F = function(){};
        F.prototype = Parent.prototype;
        Child.prototype = new F();
        Child.prototype.constructor = Child;
    }   
    //ES5
    Object.create(new Parent(),{props}) //简单,多new了一个parent对象
    //避免new对象
    function Child(){
        Parent.call(this);//实例继承
    }
    Child.prototype = Object.create(Parent.prototype);//object create只进行原型继承

    3.拷贝继承

    深拷贝继承(jquery做法)

    function fDeepCopy(dest,src){
        var dest = dest || {},
            toString = Object.prototype.toString;
        for(var p in src){
            if(toString.call(p) === '[object Object]'){
                dest[p] = {};
                fDeepCopy(p,dest[p]);
            }
            else if(toString.call(p) === '[object Array]'){
                dest[p] = [];
                fDeepCopy(p,dest[p]);
            }
            else{
                dest[p] = src[p];
            }
        }
    }
    
    fDeepCopy(Child,Parent);//实例属性拷贝
    fDeepCopy(Child.prototype,Parent.prototype);//原型属性拷贝

    4. class继承(ES6)

    class Animal {
        constructor(){
            this.type = 'animal';
        }
        says(text){
            console.log(this.type + ' says ' + say)
        }
    }
    
    class Cat extends Animal{
        constructor(){
            super();
            this.type = 'cat';
        }
    }
    
    const cat = new Cat();
    cat.says('hello');//cat says hello

     总结:一般完整的继承要由借用继承和原型继承来组合完成,借用继承负责实例属性,包括引用类型的属性,原型继承一般负责原型上的方法继承,原型属性为引用类型的话,会被共用。ES6的话,直接用class继承即可。

  • 相关阅读:
    SenCha Touch AJAX跨域
    MS SQL 索引分析
    Tomcat性能优化(二) 启动参数设置
    PLSQL 连接不上64位ORACLE数据库解决办法
    PLSQL 配置连接ORACLE数据库
    Mybatis Batch 批量操作
    [No000014]听说不背单词,考英语会是这种下场-我们为什么必须背单词?
    [No000000]常用软件测试编译环境声明
    [No000013]在Office中关闭自动拼写检查和自动语法检查
    [No000012]编程中浮点数之什么是科学计数法
  • 原文地址:https://www.cnblogs.com/mengff/p/5005597.html
Copyright © 2020-2023  润新知