this指向问题

  1. 描述你的问题 :下面的代码中为什么this指向的是window而不是obj,下面图片的信息是控制台输出的是window对象

  2. 贴上相关代码

obj = {
    go: function() {
      console.info(this)
    }
};
(0 || obj.go)();
  1. 贴上报错信息:无报错信息

  2. 贴上相关截图
    ![图片上传中...]

  1. 已经尝试过哪些方法仍然没解决(附上相关链接)不知道该怎么解决

阅读 3.7k
5 个回答

因为逻辑或运算符返回的值会导致当前上下文丢失

对于this,最简单的理解方式就是:某个function里面的this指向调用这个function的对象;
例如func:
1、obj.func func里面的this指向obj
2、func() 在浏览器中实际上是window.func(),所以指向window
3、func被当做构造函数,实际上也是要构造的对象调用的func所以指向构造的对象

.........

this:

  1. 在构造函数中 , 指向 new 出来的object

  2. 在对象的方法中 指向 对象

  3. 在全局范围 指向 宿主 对象,浏览器是window,node是global

  4. 在 函数中

    1. strict 模式 undefined

    2. 非strict ,宿主对象

obj = {
    go: function() {
      console.info(this)
    }
};
(0 || obj.go)();  // obj.go 是一个函数(理解成取键对应的值) ,所以看 第4点 建议写代码都用strict 模式

还有strict模式中,变量obj 没定义会报错的

推荐问题
宣传栏