首先他们三个的作用都是重新定义this的指向,具体用法上有些许不同
我在这篇中用到call来解释this的指向问题,当时的疏漏,没有过多的解释call的作用及用法
谈谈JavaScript中的thishttps://blog.csdn.net/m0_56825253/article/details/123491133?spm=1001.2014.3001.5502
我们先来看个例子
var age = 12
var Obj = {
name:'张三',
intruction: function(){
console.log(`我是${this.name},今年${this.age}岁`)
}
}
Obj.intruction()
// 输出的结果为 我是张三,今年undefined岁
这里的this指向Obj,而Obj中没有age,所以值为undefined
下面,我们分别使用call,apply和bind来改变this的指向
var age = 12
var Obj = {
name:'张三',
intruction: function(){
console.log(`我是${this.name},今年${this.age}岁`)
}
}
var jakeObj = {
name:'jake',
age:22
}
Obj.intruction.call(jakeObj)
Obj.intruction.apply(jakeObj)
Obj.intruction.bind(jakeObj)()
// 通过这里我们发现,这三个都可以改变this的指向,只不过是bind返回的是一个函数,需要调用才能生效
当然,也可以给这三个方法传参数,我们通过下面的例子来解释
var age = 12
var name = 'outername'
var Obj = {
name:'张三',
intruction: function(from,to){
console.log(`我是${this.name},今年${this.age}岁,来自${from},去往${to}`)
}
}
var jakeObj = {
name:'jake',
age:22
}
Obj.intruction.call(jakeObj,'东土大唐','西天取经')
Obj.intruction.apply(jakeObj,['东土大唐','西天取经'])
Obj.intruction.bind(jakeObj,'东土大唐','西天取经')()
// 输出结果 我是jake,今年22岁,来自东土大唐,去往西天取经
// 这三者中,其中只有apply通过数组传参
Obj.intruction.bind(jakeObj,['东土大唐','西天取经'])
// 输出结果 我是jake,今年22岁,来自东土大唐,西天取经,去往undefined
// 从这里我们可以看出,参数不限定是string,可以是各种类型