ES6——— apply(),call()方法的使用

78 阅读1分钟

apply(),call()方法的使用

apply()语法

apply(this,arguments); 第一个参数是this指向,第二个参数接收数组;

  1. 声明一个构造函数
    let PersonConstructor = function ( name,age,gender ) {
        this.name = name;
        this.age = age;
        this.gender = gender;
    };
  1. 再次声明一个构造函数,在里面调用personConstructor()构造函数的结构
    let Person1Constructor = function ( name,age,gender,grad ) {
        // 调用实例,利用apply()方法修改this指向
        // 传入当前的this的指向
        Person.apply(this,arguments);
        this.grad = grad;
    };

第一个参数是this指向,第二个参数接收数组;

3.声明实例

    let student = new Person1Constructor('Jimi','男',10,90);
     console.log(`打印实例结果:` + '\n' + `姓名:`+ student.name + '\n' + '年龄:' + student.age + '\n'+ '性别:' + student.gender + '\n' + student.grad);

image.png

call()语法

call(this,value1,value2,...) 第一个参数是this指向,value1,value2,...是参数列表

  1. 声明对象
    window.age = 20; // 声明window全局对象
    document.age = 28;  // 挂载到document对象上
    let p2 = {          // 声明一个 p2 对象
        age:30,
    };
  1. 调用
    let ageArguments = function () {     // 声明一个函数对象调用
        console.log('打印年龄:' + this.age);
    };
  1. 使用call()方法修改this指向
    ageArguments();   //20, window对象上面的age
    ageArguments.call();  // 20,传入的为空,指向window对象上面的age
    ageArguments.call(document);    // 28,传入的对象为document,根据call()方法:传入哪个对象,指向哪个对象的this
    ageArguments.call(p2);  // 30,传入的p2对象,根据call()方法(规则):传入哪个对象,指向哪个对象的this

image.png

生活永远没有一帆风顺,难得的是在艰难困苦中永远保持纯真。