改变this指向

133 阅读1分钟

改变this指向

函数下改变this指向

function fn() {
    // console.log(a);
    // arguments 参数组
    console.log(arguments);
    console.log(this);
}
// call(指向的位置,参数1,..., 参数n)
// apply(指向的位置,[参数1,..., 参数n])
// fn.call(document.body, 22)
fn.apply(document.body, [22, 43, 44])

console.log(fn.bind(document.body))
// bind本身不会执行函数,会返回一个新的函数体
// 返回的函数是一个新的函数,bind会将新的函数下的this指向改变
// 和call/apply区别:
    // 1.bind是一个方法,执行完毕会返回一个函数;
    // 2.call/apply会立即调用函数本身;
    // 3.bind返回的是一个新的函数,改变的是新函数下的this指向
fn.bind(document.body)(12, 34, 43)

封装bind简易方法

function example(a) {
    console.log(a);
    console.log(this);
}
// bind(fn, 指向的位置)
function bind(fn, obj){
    return function() {
        fn.call(obj, ...arguments);
    }
}
bind(example, document.body)(66)