摘自:http://www.ruanyifeng.com/blog/2010/04/using_this_keyword_in_javascript.html
this是Javascript语言的一个关键字。
它代表函数运行时,自动生成的一个内部对象,只能在函数内部使用。比如,
function test(){
this.x = 1;
}
随着函数使用场合的不同,this的值会发生变化。但是有一个总的原则,那就是this指的是,调用函数的那个对象。
下面分四种情况,详细讨论this的用法。
情况一:纯粹的函数调用
这是函数的最通常用法,属于全局性调用,因此this就代表全局对象Global。
请看下面这段代码,它的运行结果是1。
function test(){
this.x = 1;
alert(this.x);
}
test(); // 1
为了证明this就是全局对象,我对代码做一些改变:
var x = 1;
function test(){
alert(this.x);
}
test(); // 1
运行结果还是1。再变一下:
var x = 1;
function test(){
this.x = 0;
}
test();
alert(x); //0
情况二:作为对象方法的调用
函数还可以作为某个对象的方法调用,这时this就指这个上级对象。
function test(){
alert(this.x);
}
var o = {};
o.x = 1;
o.m = test;
o.m(); // 1
情况三 作为构造函数调用
所谓构造函数,就是通过这个函数生成一个新对象(object)。这时,this就指这个新对象。
function test(){
this.x = 1;
}
var o = new test();
alert(o.x); // 1
运行结果为1。为了表明这时this不是全局对象,我对代码做一些改变:
var x = 2;
function test(){
this.x = 1;
}
var o = new test();
alert(x); //2
运行结果为2,表明全局变量x的值根本没变。
情况四 apply调用
apply()是函数对象的一个方法,它的作用是改变函数的调用对象,它的第一个参数就表示改变后的调用这个函数的对象。因此,this指的就是这
第一个参数。
var x = 0;
function test(){
alert(this.x);
}
var o={};
o.x = 1;
o.m = test;
o.m.apply(); //0
apply()的参数为空时,默认调用全局对象。因此,这时的运行结果为0,证明this指的是全局对象。
如果把最后一行代码修改为
o.m.apply(o); //1
运行结果就变成了1,证明了这时this代表的是对象o。
分享到:
相关推荐
下面我们将深入探讨`this`的使用方法。 1. **全局作用域与浏览器环境**: 在浏览器环境中,如果`this`在全局作用域中被引用,它通常会指向`window`对象。在Node.js环境下,`this`则默认指向`global`对象。 2. **...
在本文中,我们将深入探讨`this`在JavaScript中的工作原理,以及在不同场景下的用法。 1. **函数调用方式** 在函数调用中,`this`的值取决于函数被调用的方式。如果函数是作为对象的方法调用,`this`将指向调用该...
本文将详细介绍JavaScript中一种常见的事件处理用法——onclick(this)。 首先,我们需要理解什么是onclick事件处理器。在HTML中,onclick是一个事件属性,用于指定当元素被点击时将调用的JavaScript代码。这个属性...
在《javaScript语言精粹》这本书中,把 this 出现的场景分为四类,简单的说就是: 有对象就指向调用对象 没调用对象就指向全局对象 用new构造就指向新对象 通过 apply 或 call 或 bind 来改变 this 的所指。 1) 函数...
例如,在使用原型继承时,通过.prototype方法添加到函数原型上的方法,其内部的this仍然会正确地指向使用new关键字创建的实例,而不会指向原型对象本身。 最后,在实际编程中,若需要确保this的指向不变,可以使用...
### JavaScript 中 `this` 的用法详解 #### 一、引言 在 JavaScript 开发过程中,`this` 关键字的使用常常令开发者感到困惑。这是因为 `this` 的值并不是静态确定的,而是取决于函数调用的方式。了解 `this` 的...
在JavaScript编程语言中,...总结起来,JavaScript中的this用法是多样的,理解其行为并学会在不同场景下正确使用this是JavaScript开发者必备的技能。通过深入学习和实践,你将能够更有效地控制代码中的对象和函数行为。
JavaScript中的`this`关键字是一个非常重要的概念,它用于在函数执行时引用当前上下文的对象。在JavaScript中,`this`的...通过深入学习并实践这些规则,可以更好地掌握JavaScript中的`this`用法,从而提高编程能力。
JavaScript中的`this`关键字是程序设计中的一个核心概念,它在不同上下文环境中有着不同的指向,这使得理解和掌握`this`的用法至关重要。在JavaScript中,`this`的值取决于函数调用的方式,而不是定义的方式,这为...
在JavaScript开发中,使用jQuery的$(this)在原生态函数中可能会出现无效的问题,本文将对此进行详细的分析和解决方法的介绍。 一、问题描述 在JavaScript开发中,我们经常使用jQuery来简化我们的代码,但是当我们...
使用`.call()`, `.apply()`或`.bind()`方法可以显式地设置`this`的值。这些方法允许开发者指定`this`应该绑定到哪个对象。 ```javascript function fn() { console.log(this); } var obj = { a: 1 }; var fun = ...
通过对不同场景下`this`的用法进行分析,我们可以更好地控制代码中的对象引用,从而编写出更清晰、更易于维护的程序。在实际开发中,应根据需求灵活运用`call`、`apply`和箭头函数来处理`this`的指向问题。
### this的用法以及改变this指向 #### 为什么学习this? 在JavaScript中,`this`关键字的使用极为广泛。理解并掌握`this`的工作机制对于提高编程能力至关重要: 1. **阅读代码的能力**:不了解`this`的工作原理,...
正确地使用`this`可以使JavaScript代码更具有面向对象的特性,同时避免常见的错误。在编写JavaScript代码时,时刻关注`this`的上下文,确保其指向预期的对象,是提高代码可读性和可维护性的关键。
下面我们将详细探讨在不同场景下`this`的用法。 1. **全局作用域中调用函数** 当函数在全局作用域中被调用时,`this`通常引用的是全局对象,在浏览器环境中就是`window`对象。例如: ```javascript function fn1...
在本话题中,我们将深入探讨JavaScript中的类继承,并特别关注`this.callParent`这个方法,它是如何被用来调用超类方法的。 首先,让我们了解JavaScript中的构造函数。构造函数是一种特殊的函数,用于创建和初始化...