今天面试被问了个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) }
成功~~~,当然如果不使用箭头函数和...运算符,也可以换其他方式实现,也都不难
如对本文有疑问, 点击进行留言回复!!
轻松解决 org.apache.taglibs.standard.tlv.JstlCoreTLV 困惑
vert实践五——Json?Protocol Buffer?FlatBuffers?
[基于tensorflow的人脸检测] 基于神经网络的人脸检测8——验证训练好的神经网络
selenium + ajax抓取英雄联盟全部英雄的详细信息及多线程保存全部皮肤图片到本地
网友评论