`

Javascript语言中的this

 
阅读更多

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

分享到:
评论

相关推荐

    JavaScript语言中this指向研究 (1).pdf

    JavaScript中的`this`关键字是一个非常重要的概念,它在不同上下文中具有不同的指向,这使得理解和掌握`this`的用法成为JavaScript开发中的关键点。在本文中,我们将深入探讨`this`在全局变量、函数、对象、构造函数...

    JavaScript 语言精粹

    此外,《JavaScript语言精粹》还会深入讨论作用域、变量提升、this关键字、事件处理、DOM操作以及异步编程,如回调函数、Promise和async/await。这些知识点对于前端开发人员来说至关重要,因为它们直接影响到网页的...

    JavaScript语言精粹 pdf

    这本书由Douglas Crockford所著,他不仅是JavaScript语言的重要贡献者,更是JSON格式的发明者,因此在书中,他以其丰富的经验和深刻的洞察力,对JavaScript进行了全面而透彻的剖析。 ### 重要知识点概览 #### 1. ...

    JavaScript中this关键字使用方法详解

    在JavaScript编程语言中,`this`关键字是一个至关重要的概念,它常常引发初学者的困惑,因为它的值在不同的上下文中可能会有所不同。`this`关键字主要用来引用对象的上下文,或者说是当前执行环境中的对象。在本文中...

    JavaScript 语言参考 中文版

    2. **字母顺序的关键字列表**:关键字是JavaScript语言中预定义的保留词汇,如`break`, `case`, `catch`, `class`, `const`, `continue`, `debugger`, `default`, `delete`, `do`, `else`, `enum`, `export`, `...

    详解Javascript 中的this指针

    `this`的值并不是静态绑定的,而是取决于函数调用的方式,这一点与许多静态类型的语言如C++或Java不同,这些语言中的`this`或`self`关键字通常指向实例对象。 #### `this`指针的动态特性 JavaScript中的`this`具有...

    高手详解javascript中的this指针

    `this`在JavaScript中并不像其他静态类型语言(如Java或C++)中的指针那样工作,而是根据函数调用的方式动态确定其值。以下是对`this`指针的详细解释: 1. **全局作用域中的`this`** 在全局作用域中,`this`通常...

    Javascript中神奇的this

    JavaScript中的`this`关键字是一个非常重要的概念,它与许多其他编程语言中的行为不同,因此常常让开发者感到困惑。本文将详细解析`this`在JavaScript中的工作原理及其绑定规则。 1. `this`并不总是指向函数自身 ...

    JavaScript语言精粹.源代码

    《JavaScript语言精粹》是一本深受开发者喜爱的经典书籍,它深入浅出地讲解了JavaScript的核心概念和技术,帮助读者掌握这门语言的精髓。下面,我们将详细探讨这本书中涉及的一些重要知识点,并结合源代码"example_...

    JavaScript语言基础.pdf

    ### JavaScript语言基础知识点详解 #### 1. 变量定义 **JavaScript** 是一种广泛使用的脚本语言,常用于Web前端开发。对于初学者来说,理解变量定义的基础知识至关重要。 - **变量命名规则**: - 变量名区分大小...

    JAVASCRIPT多语言切换界面

    在HTML中,我们用占位符替换动态内容,然后用JavaScript根据用户选择的语言加载对应的文本。例如,将`<span id="greeting"></span>`与JavaScript绑定: ```javascript document.getElementById('greeting')....

    详细讲解JavaScript中的this绑定

    `this`在JavaScript中并不像其他语言中的`this`那样简单地指向对象本身,而是根据函数调用的方式动态确定其指向。理解`this`的工作方式对于编写高质量的JavaScript代码至关重要。 1. **默认绑定**: - 当函数被...

    javascript 中关于 this 的用法.zip

    在JavaScript编程语言中,"this"关键字是一个至关重要的概念,它用于引用对象的上下文,尤其是在函数调用时。理解this的用法是提升JavaScript技能的关键。本篇将深入探讨JavaScript中的this用法,帮助你更好地掌握这...

    JavaScript语言参考(CHM)手册

    本"JavaScript语言参考(CHM)手册"是开发者的重要参考资料,提供了全面、详细的JavaScript语法和API信息。 CHM(Compiled Help Manual)是微软开发的帮助文件格式,它将HTML文档编译成一个单一的文件,方便用户快速...

    ES是下一代JavaScript语言标准的统称

    ES,全称为ECMAScript,是JavaScript语言的一个标准化规范。这个规范由Ecma国际制定,并由ECMA-262文档定义。ES是JavaScript的核心,它定义了语言的语法、类型、语句、操作符、对象、函数等关键特性。自1997年以来,...

    JavaScript中this指向.pdf

    JavaScript是一门动态语言,其中this关键字的含义并非总是固定,而是根据函数调用的上下文动态决定的。这种特性使得this在JavaScript中具有了多重含义,对于初学者来说,确实是一个令人困惑的概念。 首先,需要明确...

    JavaScript语言精粹.修订版---高清版.pdf

    根据提供的文件信息,“JavaScript语言精粹.修订版---高清版.pdf”主要聚焦于JavaScript编程语言的核心概念和技术要点。虽然给出的部分内容链接重复且未提供实际的书籍摘要或章节概述,但我们可以基于标题、描述和...

    JavaScript中this指向.docx

    不同于传统面向对象编程语言如Java或C#中的`this`概念,JavaScript中的`this`在运行时绑定,并且其指向会根据调用函数的方式而发生变化。本文将深入探讨`this`的各种应用场景,帮助读者更好地理解和掌握这一关键概念...

Global site tag (gtag.js) - Google Analytics