手写系列 # 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


目录
相关文章
|
7月前
03 # 手写 call
03 # 手写 call
41 0
|
7月前
13 # 手写 concat 方法
13 # 手写 concat 方法
59 0
|
4月前
|
JavaScript 前端开发 测试技术
手写call , apply , bind 方法的实现
本文通过实例讲解了JavaScript中`call`、`apply`及`bind`方法的用途与实现。以`call`为例,展示了如何改变函数内的`this`指向,并立即执行该函数。通过在`Function.prototype`上定义`myCall`,利用`Symbol`确保新增属性的唯一性,从而避免命名冲突。接着介绍了如何处理不定数量的参数传递,最终实现了自定义的`myCall`方法。随后简述了`apply`与`call`的区别,并展示了其实现方式,主要在于参数传递形式的不同。最后,通过`bind`方法创建了一个返回新函数的例子,该新函数具有固定的`this`上下文,同时支持分批参数传递。
39 2
手写call , apply , bind 方法的实现
|
5月前
|
JavaScript
js【详解】bind()、call()、apply()( 含手写 bind,手写 call,手写 apply )
js【详解】bind()、call()、apply()( 含手写 bind,手写 call,手写 apply )
29 0
|
6月前
|
Python
魔术方法 __call__
【6月更文挑战第28天】
44 0
|
7月前
|
索引
07 # 手写 find 方法
07 # 手写 find 方法
60 0
|
7月前
|
索引
06 # 手写 map 方法
06 # 手写 map 方法
57 0
|
7月前
|
索引
08 # 手写 filter 方法
08 # 手写 filter 方法
45 0
|
前端开发
手动封装call
手动封装call
68 0