为了账号安全,请及时绑定邮箱和手机立即绑定

function中bind绑定问题

function中bind绑定问题

白猪掌柜的 2019-03-12 17:15:22
在开发中遇到this指向问题,除了使用箭头函数外,我想着能不能用bind来解决。我在用fn的建议写法时绑定就出错误,使用传统写法就ok。MDN上也查不出问题在哪
查看完整描述

3 回答

?
慕盖茨4494581

TA贡献1850条经验 获得超11个赞

第二种合法适因为满足


{key:value}

的形式,value表示的范围很大可以是很多合法语句,声明、运算、赋值、iife...,function(){}.bind()就是合法语句;

第一种ES6的简写

可以理解成


{

    value,

    func(){}

}

被解析成


{

    value: value,

    func: function(){}

}

的形式,但是并不会把


    value + 1,

    func(){}.bind()

解析成


{

    value: value + 1,

    func: function(){}.bind()

}

的形式,换句话说,如果你那种形式合法


var a = {

    success(){},

    success(){}.bind({a:1}),

    success(){}.bind({a:2})

}

那你如何区分a.success


查看完整回答
反对 回复 2019-04-04
?
绝地无双

TA贡献1946条经验 获得超4个赞

个人猜测:


{

    funcName(args...) {

        // ...

    }

}

这种是语法层面的 声明方法 操作,编译器能接受的只是 funcName(...) {...} 这么个结构, } 之后就不允许出现 . 这种行为了。



{

    funcName: funciton(args...) {

        //...

    }.bind(...) // 注意到 bind 返回的仍然是一个 function

}

这种是为 funcName 这个键赋值一个 Function 类型的匿名函数的值。


所以应该是语法层面的问题。


如有错误还请海涵 : )


查看完整回答
反对 回复 2019-04-04
?
繁华开满天机

TA贡献1816条经验 获得超4个赞

var obj = {
func01: function() {},
func02() {}
};

这应该是两种写法上的区别
func01是在执行那一行的时候,function才定义的,当执行bind的时候function就已经定义好了,所以使用bind不会出错,
而func02是在定义obj的过程中定义的,当执行到func02的时候,这时候函数的声明有可能还没执行完,所以这时候调用bind方法会报错


查看完整回答
反对 回复 2019-04-04
  • 3 回答
  • 0 关注
  • 773 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信