判断this

按照优先级的有先后顺序判断this的指向:
1.函数是否在new中调用(new绑定)?如果是的话this绑定的是新创建的对象.

var bar = new fun()

2.函数是否用过call\apply(显式绑定)或者硬绑定(bind)调用?如果是的话,this绑定的是指定的对象.

var bar = fun.call(obj)

3.函数是否在某个上下文对象中调用(隐式绑定)?如果是的话,this绑定的是那个上下文对象.

var bar = obj.foo()

4.如果都不是的话,使用默认绑定.如果在严格模式下,就绑定到undefined,否则绑定到全局对象.

var bar = foo()

-------------------------------我是分割线----------------------------------

var foo = {
  func1:  function (bar){
    bar();//输出window, 而不是foo
    console.log(this);// 这里的this关键字是foo对象的一个引用}
}
  foo.func1(function(){console.log(this)})

当this值的宿主函数被封装在另一个函数的内部或在另一个函数的上下文中被调用时,this值将永远是对head对象的引用(this在ES5中是固定的).

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,991评论 19 139
  • 官方中文版原文链接 感谢社区中各位的大力支持,译者再次奉上一点点福利:阿里云产品券,享受所有官网优惠,并抽取幸运大...
    HetfieldJoe阅读 6,937评论 15 54
  • 特别说明,为便于查阅,文章转自https://github.com/getify/You-Dont-Know-JS...
    杀破狼real阅读 720评论 0 1
  • 根据优先级来判断this绑定的哪个对象1.函数是否在new中调用(new 绑定)?如果是的话this绑定的是新创建...
    _李雷阅读 172评论 0 0
  • 几乎每个人都听过:“不忘初心,方得始终"却很少有人知道下一句,”初心易得始终难守"做任何事情都一样,难在坚持,也贵...
    玄紫阅读 337评论 0 0