JavaScript中的call,apply,bind理解以及用法

看了很多关于这三种用法说明的博客,感觉还是没有菜鸟教程的教材简单直观,一下作为笔记加深理解

var name='张三',age =17;
var obj={
    name:'李四',
    objAge:this.age,
    myFun:function(){
         console.log(this.name+"哈哈哈"+this.age)
     }
}
console.log(obj.objAge)//17
obj.myFun()//李四哈哈哈undefined

var fav='一点点'function shows(){
	console.log(this.fav)//一点点

上述代码中,第一个打印里面的this指向obj,第二个全局声明的shows函数里的this指向window。

1.call()、apply()、bind() 都是用来重定义 this 这个对象的!

var name='小王',age=17;
var obj={
    name:'李四',
    objAge:this.age,
    myFun:function(){
         console.log(this.name+"哈哈哈"+this.age)
     }
}
var db={
	name:'德玛',
	age:99
}
obj.myFun.call(db);    // 德玛哈哈哈99
obj.myFun.apply(db);    // 德玛哈哈哈99
obj.myFun.bind(db)();   // 德玛哈哈哈99

以上方法除了bind()方法后面多出了个()外,结果返回都一致!
由此得出结论,bind返回的是一个新的函数,你必须调用它才会被执行。

2.对比call、bind、apply传参情况下

var name='小王',age=17;
var obj={
	name:'小张',
	objAge:this.age,
	myFun:function(fm,t){
		console.log(this.name+'年龄'+this.age,'来自'+fm+'去往'+t)
	}
}
var db={	
	name:'德玛',
	age:99
}
obj.myFun.call(db,'成都','上海');     // 德玛 年龄 99  来自 成都去往上海
obj.myFun.apply(db,['成都','上海']);      // 德玛 年龄 99  来自 成都去往上海  
obj.myFun.bind(db,'成都','上海')();       // 德玛 年龄 99  来自 成都去往上海
obj.myFun.bind(db,['成都','上海'])();   // 德玛 年龄 99  来自 成都, 上海去往 undefined

从以上四个结果可以看出,call,bind,apply这三个函数的第一个参数都是this的指向对象;
参数的区分:
1.call的参数是直接放进去的,第二第三第n个参数全部都用逗号分隔,直接放到后面obj.myFun.call(db,‘成都’, … ,‘string’ )。
2.apply的所有参数是必须放在一个数组里面传进去obj.myFun.apply(db,[‘成都’, …, ‘string’ ])
3.bind除了返回是函数以外,它的参数和call一样。
三者的参数均不限类型

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值