JS中为啥object中,this指向window?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JS中为啥object中,this指向window?相关的知识,希望对你有一定的参考价值。

小白,可以骂我;
var obj =
a:10,
b:this,
c:
a1:20,
b1:this


obj.b 我就想不明白。 为什么这个对象中的属性b 会指向window;
即使是对象包裹多层; 这个c对象中的b1也会指向window?
求大佬给解答一下;
我是这样理解的;函数也是对象,谁调用这个函数;this就指向谁?
obj也是对象,那么这个obj在哪个环境运行;this就指向谁; 但是这个obj中的c是在obj中运行的,为啥 b1 也指向window?

刚开始学,很容易对javascript中的this搞得晕头转向,因为它指向谁,取决于它所在的地方。

    在方法中,this 表示该方法所属的对象。

    如果单独使用,this 表示全局对象。

    在函数中,this 表示全局对象,在严格模式下,this 是未定义的(undefined)。

    在事件中,this 表示接收事件的元素。

    类似 call() 和 apply() 方法可以将 this 引用到任何对象。

你这个例子里就属于单独使用,所以这里的this代表的是全局对象,浏览器环境下就说window了。

把你的例子稍微改一下:

var obj =

a: 20,

b: function() return this.a+= 10

这时候执行 obj.b(),就发现这里的this指向的是obj了,也就算上述的第一条。关于this的指向要多练习,多思考,因为它确实乱糟糟,所以在ES6中出现了箭头函数,缓解了这个噩梦。

追问

1

参考技术A b是obj的属性,b1是c的属性,请注意,它们并不是方法或函数,所以它们并没有你所谓的“运行”,所以this只能指向全局对象也就是window

以上是关于JS中为啥object中,this指向window?的主要内容,如果未能解决你的问题,请参考以下文章

js中构造函数和普通函数的区别

如何判断Object对象不为空

为啥js的箭头函数的this指向的是全局呢?

关于this指向思考

关于 js 中 this 指向的问题

VUE 定义的this 为啥在JS里面会变