call()/apply()/bind()的用法
Function.prototype.bind(obj) :将函数内的this绑定为obj, 并将函数返回
function foo() { console.log(this) // this指向window } foo()
let obj = {userName: 'huang'} function foo() { console.log(this) // this指向obj console.log(this.userName) // huang } foo.call(obj)
let obj = {userName: 'huang'} function foo() { console.log(this) // this指向obj console.log(this.userName) // huang } foo.apply(obj)
let obj = {userName: 'huang'} function foo( ) { console.log(this) // this指向obj console.log(this.userName) // huang console.log(data) } foo.apply(obj, [33]) //apply传参数要用数组,第二个参数必须是数组 foo.call(obj, 33) // 直接从第二个参数开始依次传入
let obj = {userName: 'huang'} function foo() { console.log(this) // this指向obj console.log(this.userName) // huang } var bar = foo.bind(obj) //绑定完this不会立刻调用当前的函数,而是将函数返回 bar()
let obj = {userName: 'huang'} function foo(data) { console.log(this) // this指向obj console.log(this.userName) // huang console.log(data) } var bar = foo.bind(obj, 33) //绑定完this不会立刻调用当前的函数,而是将函数返回 bar()
区别bind()与call()和apply(): 都能指定函数中的this,call()/apply()是立即调用函数,bind()是将函数返回
bind()一般在回调函数中使用,在回调函数中将this指向某个对象,然后进行操作(拿对象的属性进行对比,赋值等操作)