关于js this的问题

Where am I in heart 2020-12-14 11:46:54
<script> var name =‘111’ var a={ name:’222’ say:function (){ console. log(this. name) } } var b={ name:’333’ say:function (fun){ fun() } } b. say(a. say) </script> 或者 <script> var name =‘111’ var obj={ name:’222’ say:function (){ (function (){ console. log(this. name) }()) } } obj. say() </script> 为什么console的this 是window?
...全文
1658 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
luj_1768 2020-12-15
  • 打赏
  • 举报
回复
好像*this, *me,都是声明在类似object, node, item, 这样的基类中的,主要应用于自身指代。其作用域分辨是无需说明的。问题在于你的函数声明是想混淆有关的作用域分辨指代,应该不会有什么效果的。我觉得四楼的解释非常正确。
泡泡鱼_ 2020-12-14
  • 打赏
  • 举报
回复
引用 1 楼 Where am I in heart 的回复:
this 一般指调用包含this的函数的对象。这里this不应该是指b. say方法或者包含匿名函数的()吗?但是这些不是对象啊
错了。如果是直接调用b.say(),那this就是指向b。但你是将a.say做为回调使用,相当于 const say = a.say; b.say(say); 就和你在外部定义一个全局的函数是一样的效果,它内部this指向的就是window 这个this,是由执行上下文决定的,不是说函数定义的地方是什么样子它就是什么样子。你要去看函数调用的地方,是由它被调用的方式决定的
shuxhan 2020-12-14
  • 打赏
  • 举报
回复
要想在方法中调用对象的属性,必须通过this
shuxhan 2020-12-14
  • 打赏
  • 举报
回复
在方法内部,this是一个特殊的变量,它始终指向当前对象,你这里的this 指的是对象a https://shuxhan.com/20201104-javascript-function/#1.this
  • 打赏
  • 举报
回复
this 一般指调用包含this的函数的对象。这里this不应该是指b. say方法或者包含匿名函数的()吗?但是这些不是对象啊

87,987

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧