JavaScript this关键字指向的四种调用场景解析

作者:拾光时间:2026-10-23 21:28:08浏览:605

本文详细解析JavaScript中this关键字在四种常见调用方式下的指向规则:对象方法调用指向实例,普通函数调用指向全局,构造器调用指向新对象,以及通过call或apply调用时指向指定对象。结合代码示例说明不同场景下的行为差异。

JavaScript this关键字指向的四种调用场景解析

在过往的编码实践中,开发者常遇到this关键字指向不明的问题。近期阅读曾探所著的《JavaScript设计模式》一书,其中对this在不同语境下的指代对象进行了详细阐述,内容颇具启发性。

this指代的情况

通常情况下,this的指向主要涉及以下四种情形:

1、对象.函数的形式调用:object.function();

2、普通函数的形式调用:function();

3、构造器调用;

4、Function.prototype.call或Function.prototype.apply调用;

对象.函数的形式调用

1、对象.函数的形式调用

当通过对象.函数的方式调用时,this指向该对象本身。


var obj = {
  num:1,
  getNum:function(){
    alert(this.num);//输出1
  }
}
obj.getNum();

普通函数形式调用

对象.函数方式调用时,指代该对象。

当以普通函数的形式被调用时,this指向全局对象。


window.num = 2;
var obj = {
  num:1,
  getNum:function(){
    alert(this.num);
  }
}
obj.getNum();//弹出1
var fun1 = obj.getNum;
fun1();  //弹出2

值得注意的是,直接调用函数 fun(); 与通过对象调用函数 xxx.fun(); 这两种方式中,this指代的对象存在显著差异。

构造器调用

3、构造器调用

为了利用new关键字,JavaScript中创建对象的方式可定义如下。

var person = function(){ this.name = '刘备'; }

在此种情况下,this指向正在创建中的那个对象。

var p = new person(); alert(p.name);//弹出刘备

Function.prototype.call或Function.prototype.apply调用

4、Function.prototype.call或Function.prototype.apply调用


var obj1 = {
  name:'关羽',
  getName:function(){
    return this.name;
  }
}
var obj2 = {
  name:'刘备'
}
alert(obj1.getName());  //关羽
alert(obj1.getName.call(obj2));  //刘备

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持本站。

作者最新文章