欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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)
}

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