call和apply

call和apply方法作为为修改方法内部this的指向

var obj = {
  name : "obj"
}
function sum(a, b){ console.log(
this); } sum(); //window.test();  返回window对象
sum.apply(obj);  //返回obj对象

call和apply区别在于传入的参数不同,call方法可以传入多个参数(object,,,),apply方法只能传入两个参数(object,array)。第一个引入的参数object也就是修改this指向的参数

var obj = {
    name : "obj"
}
function sum(a , b){
    console.log(a + b);
    console.log(this);
}
sum.call(obj, 1, 2);    //call方法可传入多个参数
var arr = [2, 3];
sum.apply(obj, arr);    //apply方法传入两个参数。第二个为数组,依次传入调用方法的形参
//真数组转化为伪数组
//1.通过数组调用push方法
//2.通过apply方法,把this转向为obj对象
//3.取出arr数组元素传递给push方法的形参
var arr = [2, 3];
[].push.apply(obj, arr);
console.log(obj);     //输出{0: 2, 1: 3, name: "obj", length: 2}

 

 

call和apply

上一篇:mapper @Select()注解开发,使用模板 if 和循环


下一篇:springboot自动生成的xml文件中,mybatis头部"http://mybatis.org/dtd/mybatis-3-mapper.dtd"报错