【深入JavaScript】this的四个绑定规则

在使用函数的时候,总是会碰到一个问题,那么就是this指的是谁?一般this概念在面向对象中的时候比较多,但是Js在函数中也是存在的。 this是谁? 和函数在哪里声明没有关系。 和函数的调用方式,和调用位置有关。 并且this是在运行时绑定的 案例如下

案例一

function foo()
{
  console.log(this);
  function demo()
  {
    console.log(this)
  }
  return demo
}
foo()

var test = foo
test() 


案例二



function foo()
{
  console.log(this)
}

function foo2()
{
  console.log(this)
  foo()
}

function foo3()
{
  console.log(this)
  foo2()
}
foo3()

案例三


var demo = {
  name:"xiaoyu",
  foo:foo
}
demo.foo()



结果是不是很出乎意料。

 

先来说一下this的四种绑定规则:

  1. 默认绑定
  2. 隐式绑定
  3. 显示绑定
  4. new绑定
默认绑定
默认绑定规则下,this是啥就单纯的看你是不是单独运行




function foo()
{
  console.log(this)
}
foo() // 这种就是单独执行 那么这种的this就是window了

xx.foo() // 这种就是非单独调用,拥有一个名为xx的主体


来看一个稍微麻烦点的案例


function foo(func)
{
  func()
}

var obj={
  name: "why",
  bar:function(){
    console.log(this)
  }
}

foo(obj.bar)




这个最终也是window 因为最终的运行也是个单独调用。

隐式绑定
是通过某个对象进行调用的

也就是它的调用位置中,是通过某个对象发起的函数调用。

看如下案例:


123

版权声明:若无特殊注明,本文为《周小雨》原创,转载请保留文章出处。
本文链接:https://zxyy.me/post-200.html
正文到此结束

热门推荐

管理员已关闭本篇文章评论!