JavaScript中apply和call的理解

    /*
    call apply

    es3  emcasrcript3  给Function的prototype定义了两个方法  call和apply,
    这两个方法作用是相同, 只是用法不同,
    apply是在call上封装的一颗语法糖! 可以将数组当做参数, 会自动将数组解构

     */

    /*
    apply和call 作用是一样的, 只是传入的参数的类型不一样 apply的第二个参数必须是一个数组,
    call的第二个, 第三个参数, 第四个参数 等等...将一一对应apply第二个参数中数组中的每一个元素

     */
    // null 代表不需要改变this的指向!!
    console.log(Math.max.apply(null, [1, 2, 3, 4, 5, 6, 1000]));
    console.log(Math.max.call(null, 1, 2, 3, 4, 5, 6, 1000));


    // apply和call的第一个参数, 是this的指向
    var obj1 = {
        name: '李四'
    }
    var obj2 = {
        name: '张三'
    }

    window.name = "window";
    var getName = function () {
        console.log(this.name);
    }
    getName();
    getName.call(obj1);
    getName.apply(obj1);


    // 在上述作用中, 我们有一个延伸作用, 借用构造函数来实现继承!
    var Afunc = function () {
        this.name = 'xiaohei';
    }

    var xiaohei = new Afunc();
    console.log(xiaohei.name);

    var Bfunc = function () {
        Afunc.apply(this);
    };

    var xiaohei2 = new Bfunc();
    console.log(xiaohei2.name);



    /*
    arguments 是可以拿到函数中传入的参数, 整合一个类数组
    只是一个类数组, 可以通过下标访问元素, 但是不是一个数组, 不能使用数组的方法
    比如push shift都不能使用
     */
    var text = function () {
        console.log(arguments);
        console.log(arguments[0]);
        console.log(arguments[1]);
        console.log(arguments[4]);
//        arguments.push(1); //不是数组不能使用!
    }

    text(1,2,3,4,5);
已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页