FED1 修改 this 指向

1.描述:封装函数 f,使 f 的 this 指向指定的对象

3.思路

最初自己看到题的想法:么想法,不明白要修改成什么样。
题解:
1.使f的this指向指定对象 <=> 函数调用时,使其执行上下文为对象 <=> 使对象将函数作为其方法的调用
2.对象在调用函数时,需要传入函数所需的形参。

call,apply,bind 都是改变上下文的,但是call apply是立即执行的,而bind是返回一个改变上下文的函数副本。需要匿名函数包装且需要传入原函数的参数argumengts. bind 会创建一个新函数,即函数副本,绑定函数运行时本身的参数按照顺序作为原函数的参数来调用原函数。

call()、bind()、apply()的用法,改变this的指向,区别在于
f.call(obj, arg1, arg2...),
f.bind(obj, arg1, arg2,...)(),
f.apply(obj, [arg1, arg2, .])

4.代码

用例:

// test
let test = (function () {
  var r = bindThis(
    function (a, b) {
      return this.test + a + b;
    },
    { test: 2 }
  )(2, 3);
  return r === 7;
})();

三种方式
1.apply

function bindThis(f, oTarget) {
 return function() {
     return f.apply(oTarget, arguments)
 }
}

2.bind

function bindThis(f, oTarget) {
 return f.bind(oTarget)
}

3.call

function bindThis(f, oTarget) {
    return function() {
        return f.call(oTarget, ...arguments)
    }
}

你可能感兴趣的:(FED1 修改 this 指向)