从底层理解this是什么( 四 )
实现bindbind目的也一样 , 改变this , 但是它并不是直接调用函数 , 而是返回 改变了内部this值的函数, 当需要的时候再调用:
咱们来实现一下:
Function.prototype.dellBind = function (context) {// 判断是函数才能调用call方法if (typeof this !== 'function') {return new TypeError("类型错误")}// 用that变量保存被调用的函数const that = this;// 保存传入的参数const argArr = [...arguments];// 返回一个函数 , 这样调用这个被返回的函数 , 内部的that.call()函数才会被执行return function F() {// 用call来实现改变被调用函数内部this指向return that.call(context, [...argArr, ...arguments]);}}
咱们来分析一下bind:
- 其实bind和apply就一点区别 , bind返回一个被改变了内部this指向的函数
- 当调用返回的函数 , 改变了内部this指向的函数才能运行 , 运行后返回结果
- 实现来也很容易 , bind返回不再像call那样返回结果 , 而是返回了一个函数 , 调用返回的函数当然才能运行内部被改变了this指向的函数
代码如下:
Function.prototype.dellBind = function (context) {// 判断是函数才能调用call方法if (typeof this !== 'function') {return new TypeError("类型错误")}// 用that变量保存被调用的函数const that = this;// 保存传入的参数const argArr = [...arguments];// 返回一个函数return function F() {// 如果用的new , 即用的是构造函数if (this instanceof F) {return new that(...argArr, ...arguments);}// 用call来实现改变被调用函数内部this指向return that.apply(context, [...argArr, ...arguments]);}}
分析一下:- 通过 instanceof 分析就可以得到 ,this 是不是由 F 通过 new 得到的 ,new 已经讲过啦 ,new 运算内部会更换原型链: A.__proto__ === B.prototype
- 所以如果F的原型在this的原型链上 , 那么当然是用的 new 当作构造函数调用了 , 咱们也应该 new 该函数返回即可
【从底层理解this是什么】出处:
推荐阅读
- 资本的价值观:996是福报?底层人物就是用命换钱?
- 数据|新基建时代,高大全的数据管理解决方案是怎样“炼”成的?
- 魅族 17 系列即将升级 Android 11 系统底层
- 官方爆料:魅族Flyme的Android 11底层安排上了?
- 菜鸟学编程,不懂C++ this指针?还不赶快来学一学
- 田间地头万亿级争锋:互联网巨头与垂直玩家共舞 供应链能力考验底层逻辑
- 深入理解Netty编解码、粘包拆包、心跳机制
- 魅族17升级Android 11系统底层倒计时 12·23内测招募
- 社区团购巨头纷纷入场,底层商贩、老百姓或将成为“鱼肉”
- HFL Redis_10_set类型底层存储数据结构