this指向浏览器环境(全)

this指向之普通函数function中用
对象中的this
this指向只和调用函数的对象有关
多层嵌套的对象,内部方法的this指向离被调用函数最近的对象
多层函数嵌套的函数中this
多层函数嵌套的函数中的this指向,必须要看 该 函数有没有归属于某个对象,而不是归属于某个函数,也不需要看上一层函数所属对象,若没有指定对象,则归属于window
有对象包裹的多层函数嵌套中this
多层函数嵌套的函数中的this指向,必须要看 该 函数有没有归属于某个对象,而不是归属于某个函数,也不需要看上一层函数所属对象,若没有指定对象,则归属于window, 例子如下

function a() {
  function b(){
    console.log(this) 
  }
  b();
  console.log(this) 
}
var c = {'d' : 1}
a.call(c) // window // c
a() // window // window

什么才是给函数指定了所属对象????
(优先级最高)new 构造函数也会改变this指向,把this赋值给新对象
(优先级第二)call,apply,bind等方法指定this对象
函数成为了对象中属性的值, 如下

var d =  {
  a:function a() {
    console.log(this) 
  }
}
d.a() //{a:f}


this指向之箭头函数中用

箭头函数不绑定this,也就是根本没有this
不能用call/apply等方法修改里面的this
箭头函数中this的值和外层的this是一样的
setTimeout & setInterval中this
当延时函数中的函数是箭头函数
按照箭头函数来定this指向
当延时函数中的函数是普通函数
this指向全局对象window(当然我们可以通过bind方法改变其内部函数的this指向)
改变this指向
call()apply()…
原型中的this
原型中this指向是谁调用指向谁(不就是找所属对象吗??? so esay)
最重要的一种情况 隐式赋值改变this指向
当把函数名赋值给一个变量的时候,很可能会改变this指向,例子

function foo() { console.log( this.a ); }
var obj = { a: 2, foo: foo };
var bar = obj.foo; // 函数别名!(这里发生了隐式this改变)
var a = "oops, global"; // a 是全局对象的属性 bar(); // "oops, global" 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值