JS 函数非继承的call和apply方法
同:call & apply 主要是用于扩展this指向,降低this作用域与函数之间的耦合度;
区别:传参差异
function.call(this/object,params1,params2,...)
第一个参数为作用域指向参数,后边参数如过存在多个必须分开书写
复制代码
function.apply(this/object,[array]/arguments)
第一个参数为作用域指向参数,后边参数是一个素组或者参数对象
复制代码
案列
let name="A";
let b={name:"B"}
function alertInfo(){alert(this.name);
}
alertInfo.call();//弹框 A,this默认指向windows对象
alertInfo.apply();//弹框 A,this默认指向windows对象
复制代码
let name="A";
let b={name:"B"}
function alertInfo(age){alert(this.name+age);
}
alertInfo.call(b,20);//弹框 B 20,this此时指向b对象
alertInfo.apply(b,20);//弹框 B 20,this此时指向b对象
复制代码
let name="A";
let b={name:"B"}
function alertInfo(age,sex){alert(this.name+age);
}
alertInfo.call(b,20,'男');//弹框 B 20 男,this此时指向b对象
alertInfo.apply(b,20,'男');//错误:该方法接收array或者对象
复制代码
JS函数bind方法
该方法可用于创建一个函数实例,其this值会被bind绑定至该函数中
案列
let name="A";
let b={name:"B"}
function alertInfo(){alert(this.name);
}
let initF=alertInfo.bind();//创建的函数实例
initF();//弹框 A,this默认指向windows对象
复制代码
let name="A";
let b={name:"B"}
function alertInfo(){alert(this.name);
}
let initF=alertInfo.bind(b);//创建的函数实例
initF();弹框 B,this此时指向b对象
复制代码