js call,apply,bind方法使用

call,apply,bind方法都是被函数调用的,不同的是call,apply是立即执行的,bind是需要调用才能执行

call传的是字符串

apply传的是数组

bind传的字符串和数组都可以

如图所示:

function animal(x,y){
  console.log(this.name,x,y)
 }
let obj ={
  name:'dog'
}
animal.call(obj,'age','12')//dog age 12
animal.apply(obj,['age','12'])//dog age 12
var a = animal.bind(obj,['age','12'])//dog ['age','12']
a()
console.log(Math.floor.call(Math,'12.34'))//12
function click(){
    this.name='张三';
    setTimeout(function(){
        this.name='赵四'
        console.log(this.name)
    },2000).bind(this)
    setTimeout(()=>{
        this.name='王五'
        console.log(this.name)
    },4000).bind(this)//不支持箭头函数
}

call主要用于函数改变this指向集成属性,apply主要用于函数改变this指向,主要应用于数组的操作,列如求最大最小值,bind方法主要用于函数改变this指向,应用于settimeout定时器的this指向

普通函数和箭头函数中的this指向:
一、普通函数中的this
隐式绑定:this就是指向最近的一个调用者。
默认绑定:默认情况下,没有直接调用者,在非严格模式下,this指向window ,严格模式下(设置了’use strict’),this为undefined 。有个例外,es6引进了class,class定义的类中的方法要是没对象调用,两种模式下this都是为undefined,new构造函数中的方法没对象调用时,还是会遵守默认绑定规则。
显式绑定:当使用call,apply,bind绑定的,改变this的指向,如果函数或者方法调用之前带有关键字new,它就构成构造函数调用。

this 绑定规则优先级:
默认绑定 < 隐式绑定 < 显式绑定 < new 绑定
二:箭头函数中的this指向的是上一层的对象,没有的话则指向window

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值