(十七) bind()方法
1. bind()方法
bind()
方法和call() / apply()
方法一样, 都是用来改变函数中的this指向
只不过bind()
只改变this指向, 不执行当前函数, 类似预先改变this
function.bind(thisArg, arg1,arg2,...)
, 参数说明:
- thisArg: 预指定的this指向
- arg1, arg2, ... 预设置的参数
还有一个要注意的点就是: bind方法有返回值
- 它返回一个function的拷贝,并拥有指定的
this
值和初始参数
要点: 只改变this指向, 不执行函数
示例
var obj = {
name: '猫13'
}
fn(){
console.log(this.name);
console.log(num1 + num2);
}
// 需求: 当body被点击后,让fn中的this指向obj
// document.body.onclick = fn.call(obj) => 不行, 因为fn不等你点击就执行了
document.body.onclick = function () {
fn.call(obj)
}
// 上面时一种实现方式: 通过在匿名函数中让fn调用call方法改变this
// 更为简单的方式是利用bind()
document.body.onclick = fn.bind(obj, 10, 20) // 猫13 30
IE6 7 8中不支持bind方法
关于 bind方法的返回值, 它返回一个function的拷贝,并拥有指定的
this
值和初始参数
var obj = {
num: 100,
showNum: function () {
console.log(this.num);
}
}
var global = obj.showNum.bind(obj)
global() // 100
像bind这种预先做某种事情的思想被称为函数柯里化
仅记录自己的学习总结,如有错误,还请评论指正~