call() apply() bind() 都是用来重定义this这个对象的,不能改变箭头函数中的this指向
bind方法多了一个括号,bind返回的是一个新的函数,必须调用才能够执行
html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>call_apply_bind的区别</title>
</head>
<body>
</body>
<script>
var name = '小王', age = 17
var obj = {
name: '小张',
objAge: this.age,
myFun: function () {
console.log(this.name + "年龄" + this.age)
},
myFun2: function (fm, t) {
console.log(this.name + "年龄" + this.age, "来自" + fm + "去往" + t)
}
}
var db = {
name: '小行家',
age: 99
}
obj.myFun.call(db)
obj.myFun.apply(db) // 参数以数组的形式进行传递
obj.myFun.bind(db)()
// 在参数传递中使用apply的时候参数是以数组的形式进行传递的 这三者传递惨淡胡对参数的类型没有限制
obj.myFun2.call(db, '成都', '上海')
obj.myFun2.apply(db, ['上海', '北京']) // 参数以数组的形式进行传递
obj.myFun2.bind(db, '北京', '拉萨')()
// 不进行数据类型的限制
</script>
</html>