bind 函数 源码解析

/* 目标函数:调用bind的函数,func.bind func就称之为是目标函数 新函数:bind返回的函数,let newFunc = func.bind() newFunc就称之为新函数 */ /* 1. 返回的函数作为构造函数,新函数要继承目标函数的原型 2. 一旦把新函数当成构造函数了,目标函数的this应该指向实例对象 */ Function.prototype.customeBind = function (thisArg,…list){ let self = this; // 目标函数 // 自己实现的bind函数,如果把返回的新函数当成了构造函数,此时会遇到问题, // 就是找不到目标函数原型上的方法,解决:放新函数继承目标函数的原型 let Bound = function(…arg2){ // 如果这个函数作为了构造函数,那么目标函数的this,应该执行的是实例对象 // 如果这个不是作为构造函数,目标函数中的this还指向thisArg let thisArgSelf = this instanceof Bound ? this : thisArg; self.apply(thisArgSelf,[…list,…arg2]) } // 原型继承 // Object.create 用来创建以某一个对象作为原型的对象的 Bound.prototype = Object.create(self.prototype); Bound.prototype.constructor = self; // 返回的新函数 return Bound }

© 版权声明
THE END
喜欢就支持一下吧
点赞6 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片