1.call
1.call 方法是附加在函数调用后面使用,可以忽略函数本身的this指向
2.语法:函数名.call(要改变的this指向,要给函数传递的参数1,要给函数传递的参数2,.......)
var obj = { name: 'Tom'};
function fn(a,b){
conlose.log(this);
conlose.log(a);
conlose.log(b);
}
fn(1,2);
fn.call(obj,1,2);
// fn()的时候,函数内部的this指向的是window
// fn(obj,1,2)的时候,函数内部的this了obj
使用call的方法的时候:
1.会立即执行函数
2.第一个参数是你要改变的函数内部的this指向
3.第二个参数开始,依次是向函数传递参数
2.apply
1. apply是附加在函数调用后面使用的,可以忽略函数本身的this指向
2.语法:函数名.apply(要改变的this指向,[ 要给传递的参数1,要给传递的参数2,....])
var obj = { name: 'Tom' }
function fn(a, b) {
console.log(this)
console.log(a)
console.log(b)
}
fn(1, 2)
fn.apply(obj, [1, 2])
// fn() 的时候,函数内部的 this 指向 window
// fn.apply(obj, [1, 2]) 的时候,函数内部的 this 就指向了 obj 这个对象
使用 apply 方法的时候
-
会立即执行函数
-
第一个参数是你要改变的函数内部的 this 指向
-
第二个参数是一个 数组,数组里面的每一项依次是向函数传递的参数
3.bind
1.
bind
方法是附加在函数调用后面使用,可以忽略函数本身的 this 指向2.和call, apply不同,就是不会立即执行函数,而是返回一个已经改变的this指向的函数
3.语法:var newFn = 函数名.bind(要改变的this指向);
newFn(要传递的参数);
var obj = { name: 'Tom' }
function fn(a, b) {
console.log(this)
console.log(a)
console.log(b)
}
fn(1,2);
var newFn = fn.bind(obj);
newFn(1,2);
//fn(1,2)的时候this指向window
// newFn(1,2)的时候执行的是一个和fn一样的函数,只不过里面的this指向改变成了obj