美文网首页
this的指向

this的指向

作者: wade3po | 来源:发表于2019-02-02 15:43 被阅读15次

This的指向问题一直是JavaScript的一大核心,很多人都是觉得了解了,但是又模模糊糊。简单概括就是,this的指向永远是指向调用这个this的对象。下面介绍几个本人理解的this指向问题。

var a = 10;
console.log(this.a);
alert(this.a);

这是最简单的this指向问题,console.log()和alert()是两个函数,是window的函数

var a = 10;
window.console.log(this.a);
window.alert(this.a);

所以调用函数的对象是window,this也就是指向window。

var a = 10;
function fun() {
    var a = 100;
    console.log(this.a);
}

fun();相当于window.fun();

这段代码一样的,因为函数的调用对象是window,所以this还是指向window

var a = 10;
var obj = {
    a: 100,
    b: function () {
        console.log(this.a);
    }
};
obj.b();

可以看见,b方法是对象obj里面的方法,那么调用b方法的对象就是obj,这时的this指向就是指向obj,所以输出的是100。

var a = 10;
function fun() {
    this.a = 100;
}
var obj = new fun();
console.log(obj.a);

同样的,这边的输出也是100,因为调用a的是obj对象,this指向obj,那么这边的a就是100。

var a = 10;
function fun() {
    var a = 10000;
 }
var obj = new fun();
console.log(obj.a);

还记得原型链吗,如果是这样调用,那么输出undefined,因为obj没有定义a,要增加这个a就要函数里面用this增加或者用prototype。

接下来就是改变this指向的两个方法,call和apply,两个都是改变this的指向,只是参数不同,两个方法的第一个参数都是想要改变this指向的对象,call除了第一个参数外,剩下的都是方法的参数,apply除了第一个参数外,只能是再加一个数组,数组里面的每一项都是方法的参数。

var a = 10;
var a = 10;
var obj = {
    a: 100,
    b: function () {
        console.log(this.a);
    }
};

obj.b.apply();

obj.b.call();

输出的都是10,因为没穿参数,默认把window传进去了,所以this的指向变成了window,b方法输出的就是10。

var a = 10;
var obj = {
    a: 100,
    b: function (x, y) {
    console.log(x);
    console.log(y);
}
};
obj.b.apply(window, [1, 2]);
obj.b.call(window, 1, 2);

当要传参数的时候,第一个就必须是指定的对象,call之后的参数就是方法的参数,apply数组的参数就是方法的参数。


var a = 10;
var obj = {
    a: 100,
    b: function () {
        console.log(this.a)
    }
};
var objChange = {
    a: 10000
}
obj.b.apply(objChange);
obj.b.call(objChange);

Call和apply传入的第一个参数,就是this改变后指向的对象,所以这边输出的都是10000。

还有一种特殊情况,那就是定时器和计时器

var a = 10;
var obj = {
  a: 100,
  b: function () {
      console.log(this.a);
      setTimeout(function () {
          console.log(this.a);
      },1000);
  }
};
obj.b();

第一个输出是100,定时器输出的是10,这是因为定时器和计时器是属于window的方法,那么这时候的this就是指向window。

欢迎关注 Coding 个人笔记 公众号

相关文章

  • this的指向和改变this的指向

    一、this的指向 普通函数调用 function fn(){ console.log(this) //thi...

  • this的指向

    this的指向在函数定义的时候是确定不了的,只有函数执行的时候才能确定this到底指向谁,实际上this的最终指向...

  • this的指向

    整理自: https://zhuanlan.zhihu.com/p/23804247 https://zhuanl...

  • this的指向

  • this的指向

    函数中的this是在运行时候决定的,而不是函数定义时全局环境中的this指window其他函数中的this指向调用...

  • this的指向

    如果是一般函数,this指向全局的对象window 在严格模式下“use strict”,this为undefin...

  • this的指向

    this的指向分为四大类: 一:作为对象的方法调用 二:作为普通函数调用 三:构造器调用 四:Function.p...

  • this的指向

    this永远指向最后调用他的那个对象。 构造函数本身是无法访问自身函数的,只有实例化才可以 求数组的最大值let ...

  • this的指向

    1、全局作用域:this指向window,严格模式下指向undefined; 2、上下文的this:this指向最...

  • this的指向

    This的指向问题一直是JavaScript的一大核心,很多人都是觉得了解了,但是又模模糊糊。简单概括就是,thi...

网友评论

      本文标题:this的指向

      本文链接:https://www.haomeiwen.com/subject/bwbssqtx.html