• ECMAScript继承


    继承的定义

    • ECMAScript 实现继承可以从父类入手,所有开发者定义的类都可作为父类,出于安全考虑,本地类和宿主类不能作为父类,因为容易收到恶意攻击
    • 创建只是用于给子类提供通用函数的父类被看作抽象类
    • 子类可以继承父类的所有属性和方法,子类可以扩展父类中没有的属性和方法,还可以覆盖父类中的属性和方法

    继承的方式

    一、对象冒充

    原理:构造函数使用 this 关键字给所有属性和方法赋值(即采用类声明的构造函数方式)。因为构造函数只是一个函数,所以可使 ClassA 构造函数成为 ClassB 的方法,然后调用它。ClassB 就会收到 ClassA 的构造函数中定义的属性和方法
    实现:

    function ClassA(name){
        this.name = name;
        this.sayName = function(){
            console.log(this.name);
        }
    }
    function ClassB(name){
        this.newName = ClassA;    //函数名是指向函数的指针
        this.newName(name);
    }
    var objA = new ClassA();
    var objB = new ClassB('wyang');
    objB.sayName();    //wyang
    
    对象冒充可以实现多重继承
    • 一个子类可以继承多个父类
    • 两个类存在同名的属性或方法时,后继承的类优先级高

    二、call() 方法

    call([thisObj[,arg1[, arg2[, [,.argN]]]]])
    参数:

    • 第一个参数用作 this 的对象
    • 参数都直接传递给函数自身
    • 如果没有提供thisObj参数,那么Global对象被用作thisObj

    实现:

    function fun(sex){
        console.log(this.name + sex);   
    }
    var obj = {
        name:'wyang'
    };
    fun.call(obj,'is man');    //wyang
    

    这个例子其实就是把obj替换成了fun函数中的this,后面的参数与fun函数的参数匹配

    三、apply()方法

    apply([thisObj[,argArray]])
    参数:

    • 第一个参数用作 this 的对象
    • 传递给函数的参数的数组
    • 如果没有提供thisObj参数,那么Global对象被用作thisObj

    实现:

    function fun(sex,job){
        console.log(this.name + sex + job);  
    }
    var obj = {
        name:'wyang'
    };
    fun.apply(obj,new Array('isman','fe'));    //wyangismanfe
    

    四、call()和apply()的区别

    • 第一个参数一样
    • 第二个参数:call()方法就是普通参数;apply()方法是把参数组合成了数组进行传递(和函数的arguments相似)

    五、call()和apply()的总结

    • call()apply()方法其实就是修改对象内部的this的指向
    【版权所有,转载请注明原文链接】文章中有错误或者不妥的地方请指出!!! 我是一个要成为前端架构师的人呢。
  • 相关阅读:
    Linux三剑客之sed
    xcodebuild
    mac xcworkspace xcodebuild
    [转]Jenkins Xcode打包ipa
    ios批量打包
    ios打包
    ios 打包
    ios 尺寸
    Launch Screen在iOS7/8中的实现
    如何查看ipa包支持哪些cpu指令集
  • 原文地址:https://www.cnblogs.com/wyangnb/p/5717916.html
Copyright © 2020-2023  润新知