this是什么?

是什么?

this关键字是JavaScript中最复杂的机制之一。是一个特别的关键字,被自动定义在各个函数作用域中

* 需要明确的是,this既不指向函数自身也不指向函数的词法作用域
* 所有函数内部都有一个this
* this实际上是在函数被调用时发生绑定,指向谁完全取决于函数在哪里被调用

---以上《你不知道的JavaScript上》

this的绑定规则

  • 默认绑定 window
    • function fn() { console.log(this.a); } var a=2; fn();

    说明:fn函数中没有a这个变量和值,

    a是在全局中声明的变量, 调用fn后打印2, 说明this的指向了全局变量。
  • 隐式绑定:在命名函数的内容调用一个指向函数的属性,然后通过这个属性间接的引用函数,从而把this间接绑定到对象中

    • function fn() { console.log(this.a) } var obj={ a:2, fn:fn }; obj.fn();

    说明 :当fn被调用时,加上了对obj的作用。当函数拥有全局上下文对象时,隐式绑定会自动将函数调用中的this绑定到全局上下对象中,此时的this.a与obj.a是一样的。

  • 显示绑定

    • function fn() { console.log(this.a) } var obj={ a:2 } fn.call(obj);

    说明:通过call,调用fn时候强制将this绑定到了obj上

  • new 绑定
    • function fn() { this.a=a; } var bar =new fn(2); console.log(bar.a);

    说明:使用new调用fn()时,会构造一个新的对象将其绑定到fn的this上。

 

 

四个绑定规则的优先级

默认绑定优先级最低,显示绑定高于隐式绑定,new绑定优先级高于隐式绑定

总结:如何确定this的值?

  • 方式
    • test() :window 默认绑定,严格模式下绑定到undefined
    • p.test() :p 上下文对象的调用,就是指向的p。 --隐式绑定
    • new test() :新创建的对象 new绑定  ,this指向实例对象
    • p.call(obj): 即指定的obj对象,指向谁是由你决定的。-- 显示绑定

    注意如果指向不确定就直接指向window

  •  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值