手写系列 # 3:实现 call 方法

简介: 手写系列 # 3:实现 call 方法

实现


call 语法:


  • fun.call(context, arg1,arg2…)
  • context: 在fun函数中运行时指定的this值
  • arg1,arg2…:指定的参数列表


Function.prototype.kaimoCall = function (context, ...args) {
  context = context || window;
  // 保留 this 
  const symbolFn = Symbol();
  context[symbolFn] = this;
  // 执行函数:通过隐式绑定函数并传递参数
  const result = context[symbolFn](...args);
  // 删除上下文对象的属性
  delete context[symbolFn];
  // 返回执行结果
  return result;
}



测试

const kaimoObj = {
  name: 'kaimo'
};
function kaimoTest() {
  console.log(this.name);
}
kaimoTest.kaimoCall(kaimoObj);


2ef790caeb0e48a9bb8bc77bf8835f67.png


目录
相关文章
|
5月前
03 # 手写 call
03 # 手写 call
20 0
|
5月前
02 # 手写 instanceof 的原理
02 # 手写 instanceof 的原理
35 0
|
7月前
|
前端开发
Promise的用法&原理&手写实现-2
Promise的用法&原理&手写实现-2
21 1
|
4月前
|
前端开发 JavaScript 对象存储
【面试题】面试官为啥总是让我们手写call、apply、bind?
【面试题】面试官为啥总是让我们手写call、apply、bind?
|
5月前
|
索引
07 # 手写 find 方法
07 # 手写 find 方法
20 0
|
5月前
|
索引
06 # 手写 map 方法
06 # 手写 map 方法
22 0
|
9月前
|
JavaScript
JS 手写实现call,apply方法
JS 手写实现call,apply方法
43 0
|
10月前
|
前端开发
|
10月前
手写call-apply-bind以及了解柯里化
手写call-apply-bind以及了解柯里化
|
12月前
|
前端开发 JavaScript
手写javascript中的call、apply、bind方法~
手写javascript中的call、apply、bind方法记录
47 1