this总结

函数里this指向的总结

 this存在两个地方

一个是全局作用域下——this永远指向window对象;第二个是函数作用域下,需分情况讨论,

但是有两条铁律:

一 "this只有在函数被调用的时候才能被确定指向谁,函数定义的时候确定不了",

二 "谁调用的这个函数,函数里的this就指向谁",。

以下均讨论函数体里的this指向。

一 构造函数里的this

function Foo(){
  this.name = "susan";//this指向girl
}
var girl = new Foo();

二 对象的方法里的this

var obj = {
  fn: function() {
    console.log(this);//obj调用的fn,this指向obj
  }
}
obj.fn();

三 函数被call或apply调用时,函数里的this

function fn() {
  console.log(this);//this指向obj
}
fn.call(obj,x,y);

四 函数被当做事件处理函数时,函数里的this

button.addEventListener("click",fn);
fn() {
  console.log(this);//this指向触发事件的元素,这里指向button
}
***注意***
一些浏览器在使用非addEventListener函数(如直接在元素上onclick="fn()")动态监听事件时不遵守这个约定

五 被普通函数调用时,函数里的this

fn1() {
  console.log(this);//this指向window
  fn2();
}
fn2() {
  console.log(this);//指向fn1函数里的this,这里等于window
}
fn1();










猜你喜欢

转载自blog.csdn.net/weixin_42541498/article/details/80925406