博客
关于我
手动实现apply、call、bind
阅读量:410 次
发布时间:2019-03-06

本文共 1341 字,大约阅读时间需要 4 分钟。

手动实现apply、call、bind

apply

apply 方法用于在特定的作用域中执行函数。它接收两个参数:thisArgargsArraythisArg 是必须的,指定函数运行时使用的 this 值。如果不指定,this 会指向全局对象。在非严格模式下,thisArgnullundefined 时,会自动指向全局对象。argsArray 是可选的,传递一个数组或类数组,数组中的元素作为函数的参数传递。argsArray 中的 nullundefined 会被忽略。

实现思路是将 _apply 方法挂载到 Function.prototype 上。在 _apply 中,将函数对象赋值给指定对象的一个属性,并使用 Spread 运算符将参数展开,调用函数。

代码示例:

window.a = 1;var obj = { a: 2 };var funct = function(b, c) {    console.log(this.a, b, c);    return 1;};funct.apply(obj, [1, 2]); // 输出:2 1 2

call

call 方法用于在指定的作用域中执行函数。它接收一个可选的 thisArg 和多个可选的参数。thisArg 必须传递,指定函数运行时使用的 this 值。args 是可选的,传递多个参数。

实现思路是将 _call 方法挂载到 Function.prototype 上。在 _call 中,使用 Rest 运算符接收剩余参数,并使用 Spread 运算符将参数展开,调用函数。

代码示例:

window.a = 1;var obj = { a: 2 };var funct = function(b, c) {    console.log(this.a, b, c);    return 1;};funct.call(obj, 1, 2); // 输出:2 1 2

bind

bind 方法用于将函数与指定对象绑定,使其在被调用时使用该对象作为 this。它接收一个可选的 thisArg 和多个可选的参数。thisArg 可以是 nullundefined,在非严格模式下会自动指向全局对象。如果 thisArg 不传递,函数的 this 会指向新创建的对象。

实现思路是将 _bind 方法挂载到 Function.prototype 上。返回一个箭头函数,使用闭包将 this 值固定到指定对象,并使用 Spread 运算符传递参数。

代码示例:

window.a = 1;var obj = { a: 2 };var funct = function(b, c) {    console.log(this.a, b, c);    return 1;};var bindFunct = funct.bind(obj, 1, 2);bindFunct(); // 输出:2 1 2

每日一题

如果你对这类技术问题感兴趣,可以查看我的GitHub仓库 EveryDay

参考

如果需要更深入的理解,可以参考我的文章 手动实现apply、call、bind

转载地址:http://unckz.baihongyu.com/

你可能感兴趣的文章
Objective-C实现miller rabin米勒-拉宾素性检验算法(附完整源码)
查看>>
Objective-C实现Miller-Rabin素性测试程序(附完整源码)
查看>>
Objective-C实现Miller-Rabin素性测试程序(附完整源码)
查看>>
Objective-C实现MinhashLSH算法(附完整源码)
查看>>
Objective-C实现MinHeap最小堆算法(附完整源码)
查看>>
Objective-C实现multilayer perceptron classifier多层感知器分类器算法(附完整源码)
查看>>
Objective-C实现n body simulationn体模拟算法(附完整源码)
查看>>
Objective-C实现naive string search字符串搜索算法(附完整源码)
查看>>
Objective-C实现natural sort自然排序算法(附完整源码)
查看>>
Objective-C实现nested brackets嵌套括号算法(附完整源码)
查看>>
Objective-C实现nevilles method多项式插值算法(附完整源码)
查看>>
Objective-C实现newtons second law of motion牛顿第二运动定律算法(附完整源码)
查看>>
Objective-C实现newton_raphson牛顿拉夫森算法(附完整源码)
查看>>
Objective-C实现NLP中文分词(附完整源码)
查看>>
Objective-C实现NLP中文分词(附完整源码)
查看>>
Objective-C实现not gate非门算法(附完整源码)
查看>>
Objective-C实现number of digits解字符数算法(附完整源码)
查看>>
Objective-C实现NumberOfIslands岛屿的个数算法(附完整源码)
查看>>
Objective-C实现n皇后问题算法(附完整源码)
查看>>
Objective-C实现OCR文字识别(附完整源码)
查看>>