`

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指向研究 (1).pdf

    JavaScript语言参考手册

    JavaScript语言参考手册.pdf (主要资源) 另外附上: MS-JScript.chm MS-script56-2006.chm MS-VBScript.chm // // ---- JavaScript语言参考手册 目录 ---- // 第一章 简介 这一章简单介绍了 JavaScript,...

    图解JavaScript中的this关键字

    有一种观点认为,只有正确掌握了 JavaScript 中的 this 关键字,才算是迈入了 JavaScript 这门语言的门槛。在主流的面向对象的语言中(例如Java,C#等),this 含义是明确且具体的,即指向当前对象。一般在编译期绑定...

    javascript中this的四种用法

    在《javaScript语言精粹》这本书中,把 this 出现的场景分为四类,简单的说就是: 有对象就指向调用对象 没调用对象就指向全局对象 用new构造就指向新对象 通过 apply 或 call 或 bind 来改变 this 的所指。 1) 函数...

    javascript中this指向详解

    有一种观点认为,只有正确掌握了 JavaScript 中的 this 关键字,才算是迈入了 JavaScript 这门语言的门槛。在主流的面向对象的语言中(例如Java,C#等),this 含义是明确且具体的,即指向当前对象。一般在编译期绑定...

    javascript中的this作用域详解

    Javascript中this的指向一直是困扰我很久的问题,在使用中出错的机率也非常大。在面向对象语言中,它代表了当前对象的一个引用,而在js中却经常让我觉得混乱,它不是固定不变的,而是随着它的执行环境的改变而改变。...

    JavaScript中this详解

    这里的主题是 this ,不扯远了。this 本身原本很简单,总是...JavaScript中的this总是让人迷惑,应该是js众所周知的坑之一。 个人也觉得js中的this不是一个好的设计,由于this晚绑定的特性,它可以是全局对象,当前对

    this,this,再次讨论javascript中的this,超全面(经典)

    可以这样说,正确掌握了 JavaScript 中的 this 关键字,才算迈入了 JavaScript 这门语言的门槛。  至于js中this这个东西,好多淫解释过了,看起来好高端的样子,不晓得你看懂了木有? 先引用比较高端的,软件开发网...

    [JavaScript] Effective JavaScript 编写高质量JavaScript代码的68个有效方法 (英文版)

    No matter how long you’ve been writing JavaScript code, Effective JavaScript will help deepen your understanding of this powerful language, so you can build more predictable, reliable, and ...

    Javascript中神奇的this

    Javascript 当中的 this 与其他语言是完全不同的机制,很有可能会让一些编写其他语言的工程师迷惑。 1. 误以为 this 指向函数自身 根据 this 的英语语法,很容易将函数中出现的 this 理解为函数自身。在 javascript ...

    [JSON] JavaScript & JSON 核心技术 (英文版)

    Successfully build advanced JSON-fueled web applications with this practical, hands-on guide Overview Deploy JSON across various domains Facilitate metadata storage with JSON Build a practical data-...

    老生常谈JavaScript中的this关键字

    而在 JavaScript 中,this 是动态绑定,或称为运行期绑定的 Java中的this 在以下代码中。this代表的就是p对象。 public class Test { public static void main(String[] args) { Person p = new Person("zmt",30); ...

    JavaScript中文参考手册

    本书是 JavaScript 语言的参考手册,包括核心语言中的对象和客户端、服务器端的扩展。JavaScript 是 Netscape 跨平台的基于对象的适合于客户和服务器的脚本语言。 本书已经更新于 JavaScript 1.2 的新特性,其它...

    详解JavaScript中关于this指向的4种情况

    对很多前端开发者来说,JavaScript语言的this指向是一个令人头疼的问题。先看下面这道测试题,如果你能实现并解释原因,那本文对你来说价值不大,可以直接略过。 **开篇测试题:**尝试实现注释部分的Javascript代码...

    [JavaScript] JavaScript 极限编程 (英文版)

    Experienced developers who want to master the latest techniques and redefine their skills will find this deep dive into JavaScript's hidden functionalities gives them the tools to create truly ...

    深入理解javascript中的 “this”

    我们知道 “this” 是javascript语言的一个关键字,在编写javascript代码的时候,经常会见到或者用到它。 但是,有一部分开发朋友,对 “this” 一知半解,下面我们就一起来探讨学习下javascript中 “this” 的具体...

    浅谈JavaScript中的this指针和引用知识

    this指针在传统OO语言中,是在类中声明的,表示对象本身.在JavaScript中,this表示当前上下文,即调用者的引用 ********this永远指向的是(函数对象)的所有者 this和全局对象: var a = 1; function foo(){ var b = 2; ...

    javascript中的this详解

    avaScript 中的 this 关键字,深入浅出的分析其在不同情况下的含义,形成这种情况的原因以及 Dojo 等 JavaScript 工具...可以这样说,正确掌握了 JavaScript 中的 this 关键字,才算迈入了 JavaScript 这门语言的门槛。

    JavaScript权威指南第五版【新】(犀牛书)

    《JavaScript权威指南》全面介绍了JavaScript语言的核心,以及Web浏览器中实现的遗留和标准的DOM。它运用了一些复杂的例子,说明如何处理验证表单数据、使用cookie、创建可移植的DHTML动画等常见任务。本书还包括...

    JavaScript中的this到底是什么(一)

    然而,到了JavaScript这个动态语言里,this的写法没变,但是其含义却大大地不同了,下面用实例说明,使用浏览器为Firefox14.0.1. 首先,Hello World o(^▽^)o 本人从刚开始自学javascript这门灵活的编程语言到现在...

Global site tag (gtag.js) - Google Analytics