JavaScript bind绑定对象失效,this指向window问题求助
JavaScript bind绑定未生效的问题修正
你的代码里bind()不生效的核心原因是:箭头函数的this是词法作用域绑定的,它的this指向在定义时就固定了(这里是全局window对象),后续不管用bind()、call()还是apply()都无法修改箭头函数的this指向,所以哪怕你绑定了ob,getName里的this依然指向全局。
修正方案
方案一:将箭头函数改为普通函数
普通函数的this是动态绑定的,bind()可以正常修改它的this指向:
const ob = { name:'arif', getName() { console.log(this) return this.name; } } const x = ob.getName.bind(ob); console.log(x()); // 输出 'arif'
方案二:保留箭头函数,直接引用对象本身
如果一定要用箭头函数,可以直接在函数里访问外层作用域的ob变量,不需要依赖this:
const ob = { name:'arif', getName:() => { console.log(ob) return ob.name; } } const x = ob.getName; // 无需bind console.log(x()); // 输出 'arif'
注意事项
对象的方法通常推荐用普通函数,这样能利用JavaScript的动态this绑定机制;箭头函数更适合不需要动态this的场景,比如回调函数中需要捕获外层作用域的this时。
内容的提问来源于stack exchange,提问作者user2024080
相关产品推荐
相关产品推荐

