《前端》小弱鸡的js刷题之路-基本全废

tech2022-09-03  112

一、改变上下文

在JavaScript中,函数是一种对象,其上下文是可以变化的,对应的,函数内的this也是可以变化的,函数可以作为一个对象的方法,也可以同时作为另一个对象的方法,可以通过Function对象中的call或者apply方法来修改函数的上下文,函数中的this指针将被替换为call或者apply的第一个参数。将函数 fn 的执行上下文改为 obj 对象,只需要将obj作为call或者apply的第一个参数传入即可。

function alterContext(fn, obj) { return fn.call(obj,obj); }

共有四种正确方案(按提交的运行时间由快到慢排列):

1. apply 方法改变函数 this 值

    function alterContext(fn, obj) {

      returnfn.apply(obj);

    }

2. call 方法改变函数 this 值

    function alterContext(fn, obj) {

      returnfn.call(obj);

    }

3. bind 方法创建指定 this 值的函数实例

    function alterContext(fn, obj) {

      constbindedFn = fn.bind(obj);

      returnbindedFn();

    }

4. 给 obj 增加 fn 方法

function alterContext(fn, obj) {     obj.fn = fn;   return obj.fn(); }

案例:

var res = alterContext(function() { return this.greeting + ', ' + this.name + '!'; }, { name: 'Rebecca', greeting: 'Yo' }) console.log(res) function alterContext(fn, obj) { return fn.call(obj) }

 

最新回复(0)