猿问

function中bind绑定问题

在开发中遇到this指向问题,除了使用箭头函数外,我想着能不能用bind来解决。我在用fn的建议写法时绑定就出错误,使用传统写法就ok。MDN上也查不出问题在哪

https://img2.mukewang.com/5ca5b60d00019fb007880288.jpg

白猪掌柜的
浏览 774回答 3
3回答

慕盖茨4494581

第二种合法适因为满足{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

绝地无双

个人猜测:{    funcName(args...) {        // ...    }}这种是语法层面的 声明方法 操作,编译器能接受的只是 funcName(...) {...} 这么个结构, } 之后就不允许出现 . 这种行为了。而{    funcName: funciton(args...) {        //...    }.bind(...) // 注意到 bind 返回的仍然是一个 function}这种是为 funcName 这个键赋值一个 Function 类型的匿名函数的值。所以应该是语法层面的问题。如有错误还请海涵 : )

繁华开满天机

var obj = {func01: function() {},func02() {}};这应该是两种写法上的区别func01是在执行那一行的时候,function才定义的,当执行bind的时候function就已经定义好了,所以使用bind不会出错,而func02是在定义obj的过程中定义的,当执行到func02的时候,这时候函数的声明有可能还没执行完,所以这时候调用bind方法会报错
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答