愿君学长松,慎勿作桃李。这篇文章主要讲述call,apply,bind的区别相关的知识,希望能为你提供帮助。
这三个属性非常强大,vue,react等一些框架的内部结构,使用他们改变this的指向。
我先说这三个属性的区别,在用代码详细解释。
- call:改变this指向,函数执行 , 参数写在参数写在第二位开始的参数部分,this指向第一个参数
- apply:改变this指向,函数执行,参数写在第二位的数组中
- bind:改变this指向,函数不执行,返回一个新函数
function fn1(a,b){
this.a++;
b++;
console.log(this.a+b);
}
var obj={a:1}
fn1.call(obj,3,5);
//8this.a指的是obj的a属性且函数执行了
apply
function fn1(a,b){
this.a++;
b++;
console.log(this.a+b);
}
var obj={a:1}
fn1.apply(obj,[3,5]);
//8this.a指的是obj的a属性b是数组中第二个元素 且函数执行了
bind
function fn(a,b){
this.a=a;
this.b=b;
console.log(a+b);
return this;
}
var obj=fn.call({},3,5);
var obj1=fn.apply({},[3,5]);
var obj2=fn.bind({})(3,5);
var obj3=fn.bind({})//一样的函数说明不执行,返回一样的新函数
console.log(obj,obj1,obj2);
// {a: 3, b: 5} {a: 3, b: 5} {a: 3, b: 5}
推荐阅读
- Android(ListView 和RecyclerView区别)
- CSAPP
- SpringBoot获取ApplicationContext,再获取bean的名称
- IIS自带的http modules分别注册了HttpApplication pipeline里面的哪些事件
- android studio 如何升级sdk
- AndroidStudio 插件记录
- ANdroid Studio下载
- appium——微信小程序自动化
- appium-Hybird应用自动化