apply(),call()方法的使用
apply()语法
apply(this,arguments); 第一个参数是this指向,第二个参数接收数组;
- 声明一个构造函数
let PersonConstructor = function ( name,age,gender ) {
this.name = name;
this.age = age;
this.gender = gender;
};
- 再次声明一个构造函数,在里面调用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);
call()语法
call(this,value1,value2,...) 第一个参数是this指向,value1,value2,...是参数列表
- 声明对象
window.age = 20; // 声明window全局对象
document.age = 28; // 挂载到document对象上
let p2 = { // 声明一个 p2 对象
age:30,
};
- 调用
let ageArguments = function () { // 声明一个函数对象调用
console.log('打印年龄:' + this.age);
};
- 使用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
生活永远没有一帆风顺,难得的是在艰难困苦中永远保持纯真。