首先,函数内部中的 this 指向谁,不是在函数定义时决定的,谁调用,指向谁。
语法:函数名.call(调用者, 参数1, …)
作用:函数被借用时,会立即执行,并且函数体内的this会指向借用者或调用者
function fn(name, age) { this.name = name; this.age = age; } const obj = {} // 经过call,this指向obj,obj开始有name、age属性 fn.call(obj, '李四', 100) // 以下this均指向window,name:undefined,age:undefined fn.call() fn.call(null) fn.call(undefined)
结果:普通函数的this指向window,利用call方法将this指向了obj
语法:函数名.apply(调用者, [参数, …])
作用:函数被借用时,会立即执行,并且函数体内的this会指向借用者或调用者
function fn(name, age) { this.name = name; this.age = age; } const obj = {} // 经过apply,this指向obj,obj开始有name、age属性 fn.apply(obj, ['李四', 100]) // 以下this均指向window,name:undefined,age:undefined fn.apply() fn.apply(null) fn.apply(undefined)
结果:普通函数的this指向window,利用apply方法将this指向了obj
语法:函数名.bind(调用者, 参数, …)
作用:函数被借用时,不会立即执行,而是返回一个新的函数。需要自己手动执行,一般用于不需要立即执行的时候
function fn(name, age) { this.name = name; this.age = age; } const obj = {} // const newFn = fn.bind(obj, '李四', 100) // newFn() fn.bind(obj, '李四', 100)()
结果:普通函数的this指向window,利用bind方法将this指向了obj