JavaScript中this关键字的六种应用场景详解

作者:拾光时间:2026-10-26 07:39:12浏览:370

本文深入分析JavaScript中this关键字在不同场景下的指向规则。涵盖全局函数调用、构造函数实例化、原型方法扩展、闭包中的this行为、HTML内联事件以及跨浏览器事件注册六种情况,通过具体代码示例阐明this的绑定逻辑与常见陷阱。

以人为镜,可知得失,看来这句话是很有道理的。



全局函数调用中的this指向

Demo 1 :


当函数作为全局函数直接调用时,this指向全局对象window。此时在函数内部通过this定义的属性或方法,可以在函数外部访问,但前提是该函数必须被实际调用执行。



代码如下:

 
<script type="text/javascript">
//在function中使用this
function a() {
if (this == window) {
alert("this == window");
this.fieldA = "I'm a field";
this.methodA = function() {
alert("I'm a function ");
} 
} 
} 
a(); //如果不调用a方法,则里面定义的属性会取不到
alert(window.fieldA);
methodA();
</script>

构造函数实例化中的this

Demo 2 :


如果使用new关键字实例化一个函数,则this不再指向window,而是指向该函数的实例对象。


代码如下:

 
<script type="text/javascript">
//在function中使用this之二
function a() {
if (this == window) {
alert("this == window");
} 
else {
alert("this != window");
} 
this.fieldA = "I'm a field";
} 
var b = new a();
alert(b.fieldA);
</script>

原型方法扩展中的this与私有字段

Demo 3 :


通过prototype扩展方法时,this指向调用该方法的源对象实例。注意,通过var定义的私有字段无法通过原型链访问。


代码如下:

 
<script type="text/javascript">
//在function中使用this之三
function a() {
this.fieldA = "I'm a field";
var privateFieldA = "I'm a var";
} 
a.prototype.ExtendMethod = function(str) {
alert(str + " : " + this.fieldA);
alert(privateFieldA); //出错
}; 
var b = new a();
b.ExtendMethod("From prototype");
</script>

闭包函数中的this行为

Demo 4 :


无论是直接引用函数还是实例化函数,其返回的闭包函数内的this始终指向window。


代码如下:

 
<script type="text/javascript">
//在function中使用this之四
function a() {
alert(this == window);
var that = this;
var func = function() {
alert(this == window);
alert(that);
}; 
return func;
} 
var b = a();
b();
var c = new a();
c();
</script>

HTML内联事件中的this

Demo 5 :


在HTML元素的内联事件属性中使用this,通常代表该DOM元素本身。


代码如下:

 
<div onclick="test(this)" id="div">Click Me</div>
<script type="text/javascript">
function test(obj) {
alert(obj);
} 
</script>

跨浏览器事件注册中的this差异

Demo 6 :


在IE和Firefox(Chrome)下注册事件,this分别指向window和元素本身。


代码如下:

 
<div id="div">Click Me</div>
<script type="text/javascript">
var div = document.getElementById("div");
if (div.attachEvent) {
div.attachEvent("onclick", function() {
alert(this == window);
var e = event;
alert(e.srcElement == this);
}); 
} 
if (div.addEventListener) {
div.addEventListener("click", function(e) {
alert(this == window);
e = e;
alert(e.target == this);
}, false);
} 
</script>

以上就是我总结的this在javascript中的不同应用场景,可能还有其他的情况不一而足,以后发现了会补充进来。

作者最新文章