JavaScript this关键字指向的四种调用场景解析
本文详细解析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)); //刘备
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持本站。
JS处理含Emoji或中文的字符串转数组乱码问题
2026-11-05 16:12:28
JS怎么使用展开运算符合并对象
2026-11-05 14:42:18
ES6+环境下判断JS对象为空的简洁写法
2026-11-05 12:12:23
怎么通过replacer函数自定义JS中JSON的格式化输出
2026-11-05 11:19:44
JS正则表达式基础:字面量与RegExp构造函数的区别及常用元字符
2026-11-05 11:16:58
