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

关于javascript的bind方法的疑问

关于javascript的bind方法的疑问

米脂 2018-08-13 14:13:14
按照我的理解,函数后面执行bind之后,函数里面的this就是bind方法传进入的bind了。但是在和事件结合的时候就遇到了问题,代码:window.addEventListener('click', function(event) {    if (event.target.getAttribute('id') === 'testId') {        // 这时候this是window,而不是document.getElementById("testId")        } }.bind(document.getElementById("testId"))),为什么这是this是window而不是testId呢,求解答。
查看完整描述

1 回答

?
小怪兽爱吃肉

TA贡献1852条经验 获得超1个赞

chrome执行的

<html><head></head><body><div id="testId" style="background-color:red;width:200px;height:200px"></div><script>window.addEventListener('click', function(event) {    if (event.target.getAttribute('id') === 'testId') {        // 这时候this是window,而不是document.getElementById("testId")

        console.log( this === window ); // 输出 false
        console.log( this === document.getElementById("testId") );  // 输出 true        
    }

}.bind(document.getElementById("testId")));</script></body></html>

所以,当前 this 就是 document.getElementById("testId")

补充一点:

<html><head></head><body><div id="testId" style="background-color:red;width:200px;height:200px"></div><script>window.addEventListener('click', function(event) {    if (event.target.getAttribute('id') === 'testId') {        // 这时候this是window,而不是document.getElementById("testId")

        console.log("if");        console.log( this === window ); // 输出 false
        console.log( this === document.getElementById("testId") );  // 输出 true        
    }else{    
        console.log("else");        console.log( this === window ); // 输出 false
        console.log( this === document.getElementById("testId") );  // 输出 true    
    
    }

}.bind(document.getElementById("testId")));</script></body></html>

所以你不管是点击当前 div 还是直接点击页面任何地方,this 都是绑在 div 元素的 context的


查看完整回答
反对 回复 2018-09-26
  • 1 回答
  • 0 关注
  • 513 浏览
慕课专栏
更多

添加回答

举报

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