JavaScript中this的指向问题

继续说一下面向对象开发。

下面我简单说一下this的指向问题
this在js中主要研究的是函数中的this**

console.log(this);  //打印出来的是window

表明,不代表函数外没有this 函数外的this=>window

6559823-7c443448ad688f28.png
我是一个分割线

js中的this代表的是当前行为执行的主体(行为:方法,事件,函数等)

function eat(){ //这是函数的定义
  this 指向 jam
}
jam.eat();  //执行

在js中还有一个概念叫 context(上下文),代表当前行为执行的环境。eg:在饭店吃饭
主体:jam this:jam
context:饭店(环境可以不同 但不影响this的指向)
由此可以得出,this的指向只跟当前执行的主体有关系,跟行为在哪发生没有关系。

行为主体怎么判断?

函数执行首先看函数名有没有“.”,有的话看“.”前面是谁,是谁就指向谁,没有“.”的话,this就指向window。

1)

function fn(){
  console.log(this);
}
fn(); //window

根据上面的判断,这个this没有“.”,由此可以推断它是指向window的

var obj = {fn:fn};  //fn的属性是上面的fn函数
obj.fn(); //会调用上面的函数
//Object

根据判断,前面有“.”,所以这个this指向的是obj【执行前把上面fn()调用的注释】
2)

function fn(){
  console.log(this);
}
function sum(){
  fn();
}
sum(); //this=>window

this前面没有“.”,只是换了个环境执行,所以还是没有主体,所以是指向window的
3)

function fn(){
  console.log(this);
}
var oo = {
  sum:function(){
    fn();
  }
}
oo.sum();  //this=>window

4)

html:
<button>按钮</button>
js:
var oBtn = document.getElementsByTagName("button")[0];
oBtn.onclick = function(){
  console.log(this);
} // 点击按钮打印出来的是 <button>按钮</button>

5)

var obj = new Object();
obj.say = function(){
  console.log(this);
}
obj.say(); //Object

通过4)5)可以看出来,函数里面的this指向谁,只跟函数在运行时前面有没有“.”,有就指向前面的,没有就指向window

以上是我理解和整理的一些看法和总结,以后还会多多学习,谢谢。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值