js代码实现bind函数效果
程序员文章站
2022-08-09 17:04:48
今天面试被问了个bind函数实现问题,实现功能如下(可能是为了一些不能使用原生bind函数的场景,具体的支持情况可以到can i use查看):
// 实现mybind函数,输出'wan...
今天面试被问了个bind函数实现问题,实现功能如下(可能是为了一些不能使用原生bind函数的场景,具体的支持情况可以到can i use查看):
// 实现mybind函数,输出'wang~' var cat = { say: function() { console.log(this.content); }, content: 'miao~' }; var dog = { content: 'wang~' }; cat.say.mybind(dog)(); function.prototype.mybind = function(obj) { this = obj; }
开始的想法本来是直接赋值this指向(面试前在干其他的事,有点短路):
function.porotype.mybind = function(obj) { this = obj }
很显然是行不通的,报错了~~~this不能作为左侧变量被赋值:
uncaught referenceerror: invalid left-hand side in assignment
面试官提示可以借助call和apply函数进行实现,我的实现方法变成了下面的东西(因为this的显示绑定只能通过call apply bind函数):
function.prototype.mybind = function(obj) { return (...args) => this.apply(obj, args) }
成功~~~,当然如果不使用箭头函数和...运算符,也可以换其他方式实现,也都不难