摘要:今天面试被问了个bind函数实现问题,实现功能如下(可能是为了一些不能使用原生bind函数的场景,具体的支持情况可以到can i use查看):

小宝典致力于为广大程序猿(媛)提供高品质的代码服务,请大家多多光顾小站,小宝典在此谢过。

今天面试被问了个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) }

成功~~~,当然如果不使用箭头函数...运算符,也可以换其他方式实现,也都不难

今天面试被问了个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) }

成功~~~,当然如果不使用箭头函数...运算符,也可以换其他方式实现,也都不难

觉得可用,就经常来吧!Javascript技巧 脚本宝典 欢迎评论哦! js技巧,巧夺天工,精雕玉琢。小宝典献丑了!

本文固定链接:

js实例教程-js代码实现bind函数效果

http://www.js-code.com/js/js_1123.html

80%的人都看过