前前前前端的静静又来更新文章了,最近在努力准备考试,当然放不过javaScript了。this在我看来一直是一大难点,this太难了,这里主要说一下改变this指向的三大方法吧(欢迎留言评论哦~)
1.call,apply,bind都是改变this指向的方法,但是bind返回的是一个函数,必须被调用才会起作用哦!!
仔细看下面的代码片段
var name = 'jingjing',age = 20
var obj={
name:'jing',
objAge:this.age,
myFun:function(){
console.log(this.name + '年龄 :'+this.age);
}
}
var db = {
name:'前端静静',
age: 'xx',
}
obj.myFun.call(db) //前端静静年龄 :xx
obj.myFun.apply(db) //前端静静年龄 :xx
obj.myFun.bind(db)() //前端静静年龄 :xx
上面的代码可以看出,bind是函数,是需要调用的
2.另外一种情况下—传参
var obj={
name:'jing',
objAge:this.age,
myFun:function(from,to){
console.log(this.name + '年龄 :'+this.age,'来自'+from+'去往'+to);
}
}
var db = {
name:'前端静静',
age: '19',
}
obj.myFun.call(db,'洛阳','郑州') //前端静静年龄 :19 来自洛阳去往郑州
obj.myFun.apply(db,['洛阳','郑州']) //前端静静年龄 :19 来自洛阳去往郑州
obj.myFun.bind(db,'洛阳','郑州')() //前端静静年龄 :19 来自洛阳去往郑州
obj.myFun.bind(db,['洛阳','郑州'])() //前端静静年龄 :19 来自洛阳,郑州去往undefined
从上面的例子中可以看出:
- call的方法传参可以直接传进去,中间逗号隔开,
- apply则会以数组的方式传进去
- bind也是直接传进去,以逗号的形式隔开
以上就是这三种方法的区别了,欢迎补充评论~~~