JavaScript基础之--- 手写 call 的实现
Posted 见证LBJ
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JavaScript基础之--- 手写 call 的实现相关的知识,希望对你有一定的参考价值。
call方法
f.myCall(obj) 就是将f方法添加到obj的属性中,f中的this 指向 obj;即 obj.f()
// 思路:将~要改变this指向的方法,挂到目标对象上执行并返回 Function.prototype.myCall = function(context) { if(typeof this !== ‘function‘) { throw new TypeError(‘not function‘) } context = context || window //*************************************************************************************************** // 这三步也可以这样理解: // this指的就是调用call 方法的函数 // 给当前上下文(call方法的第一个参数)添加一个属性fn,属性值为this,当前上下文就可以调用这个方法了。 // 把call方法传入的其他的参数传入到属性fn指代的函数中,直接调用函数 // f.myCall(obj) 就是将f方法添加到obj的属性中,f中的this 指向 obj context.fn = this; //this指向的是当前的函数(Function实例) let arg = [...arguments].slice(1); //获取除了this指向对象以外的参数,空数组slice后返回仍是空数组 let result = context.fn(...arg); //隐式绑定,当前函数的this指向context //*************************************************************************************************** delete context.fn return result }
以上是关于JavaScript基础之--- 手写 call 的实现的主要内容,如果未能解决你的问题,请参考以下文章
JavaScript基础之--- 手写 apply方法 的实现
JavaScript高级手写apply()call()bind()