我一直以为this指的是包含它的最近的作用域(它爸爸),但是貌似这样理解是错误的,感觉搞懂了this,js就比较6了

如题:
我一直以为this指的是包含它的最近的作用域(父级作用域)
但是看到下图
图片描述

这里的this为什么指向的是Jsonob而不是constructor构造函数呢?

阅读 2.5k
4 个回答

1.this不指向Jsonb 如果你new了一个Jsonb的实例,this指向的是这个实例,而非类,所以首先你要清楚什么是类什么是实例
2.要搞懂this并不难,建议看一下你不知道的JS上前两章,你就能搞明白作用域与this
3.简单来说,this是动态的,是执行时候绑定的;作用域是静态的,是在你写代码的时候绑定的。this只有4种方式确认其值,都了解了就迎刃而解了

你代码的同一函数内,有什么是你不能使用的,this 指向自身函数有啥意义?
var fn=function(a,b){console.log(this+','+ a+','+b)}
fn.call([0],1,2)
fn(1,2)

新手的话有个最简单判断 .前的就是this
var o={}
o.m=fn
o.m(1,2) //.前的就是this (this is o)

对于 fn(1,2) 理解为 window(全局).fn(1,2) //(this is window)

普通情况下this永远指向调用这个函数的地方,
箭头函数就他自己,call,apply有强行换this的功能

《javascript高级程序设计》中有说到:this对象是在运行时基于函数的执行环境绑定的:在全局函数中,this等于window,而当函数被作为某个对象调用时,this等于那个对象。不过,匿名函数具有全局性,因此this对象同常指向window

不过针对于匿名函数this具有全局性的观点仍是有争议的,具体this作用域问题可参考
【Javascript】深入理解this作用域问题以及new运算符对this作用域的影响

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题