手写系列 # 4:实现 apply 方法

简介: 手写系列 # 4:实现 apply 方法

实现


apply 语法:


   fun.apply(context, [argsArr])


   context:在fun 函数运行时指定的this值


   argsArr:一个数组或者是类数组对象,其中数组中元素会作为单独参数传给fun。当参数值为null 或者undefined时,表示不需要传入任何参数。


处理参数上和 call 有区别,其他基本一样

Function.prototype.kaimoApply = function (context) {
  context = context || window;
  // 保留 this 
  const symbolFn = Symbol();
  context[symbolFn] = this;
  // 执行函数:处理参数上和 call 有区别
  console.log(arguments, arguments[1]);
  const result = arguments[1] ? context[symbolFn](...arguments[1]) : context[symbolFn]();
  // 删除上下文对象的属性
  delete context[symbolFn];
  // 返回执行结果
  return result;
}
const kaimoObj = {
  name: 'kaimo'
};
function kaimoTest() {
  console.log(this.name);
}
kaimoTest.kaimoApply(kaimoObj, [1, 2, 3]);


2084c2c5f8af4ec198c5a2cac70124b6.png


目录
相关文章
|
5月前
|
JavaScript 前端开发 测试技术
手写call , apply , bind 方法的实现
本文通过实例讲解了JavaScript中`call`、`apply`及`bind`方法的用途与实现。以`call`为例,展示了如何改变函数内的`this`指向,并立即执行该函数。通过在`Function.prototype`上定义`myCall`,利用`Symbol`确保新增属性的唯一性,从而避免命名冲突。接着介绍了如何处理不定数量的参数传递,最终实现了自定义的`myCall`方法。随后简述了`apply`与`call`的区别,并展示了其实现方式,主要在于参数传递形式的不同。最后,通过`bind`方法创建了一个返回新函数的例子,该新函数具有固定的`this`上下文,同时支持分批参数传递。
41 2
手写call , apply , bind 方法的实现
|
6月前
|
JavaScript
js【详解】bind()、call()、apply()( 含手写 bind,手写 call,手写 apply )
js【详解】bind()、call()、apply()( 含手写 bind,手写 call,手写 apply )
37 0
|
Python
apply函数的用法
apply是pandas处理数据经常用到的函数。我们可以用DataFrame的apply函数实现对多列、多行的操作。可通过axis设置参数,设为1是对列进行操作,参数axis设为0是对行操作。apply经常跟lambda一起使用,非常方便,大大提高了效率。
179 0
|
8月前
04 # 手写 apply
04 # 手写 apply
64 0
|
JavaScript
JS 手写实现call,apply方法
JS 手写实现call,apply方法
64 0
|
前端开发
前端扫盲202307手写apply
前端扫盲202307手写apply
67 0
|
前端开发
前端学习笔记202306学习笔记第三十八天-手写apply得实现2
前端学习笔记202306学习笔记第三十八天-手写apply得实现2
48 0
|
前端开发
前端学习笔记202306学习笔记第三十八天-手写apply得实现1
前端学习笔记202306学习笔记第三十八天-手写apply得实现1
69 0