前言:

    看文章标题你就知道,这篇文章我只讲一个简单的Javascript的this关键字,说它简单——它又不简单,因为曾几何时我也对this关键字有些困惑,它也确实会让不少程序员感到不解——它像是一个身份多变的“指针”,有时仅看代码都很难分辨出其当前所指向的对象;恰好这两天我突然想到应该写篇关于Javascript方面的博客,也算是为以后的公司技术培训做点儿准备。这篇文章,我可能更倾向于,用代码来直接的体现我要描述的内容。好的文章不在于它的篇幅长、内容丰富,而在于或者说更重要的是——应该用言简意赅的内容让读者快速、没有歧义的明白你所要讲解的内容;而对于技术文章,代码往往就是最好的描述。好了,直接切入正题...

  

 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
<script src="jquery.js" type="text/javascript"></script>
</head>
<body>
<input id="btnTest" type="button" value="Test" /><br />
<input id="btnTest2" type="button" value="Test2" /><br />
<input id="btnFun" type="button" value="Inner Fun" onclick="this.value=new Date().getSeconds();alert(this);" /><br />
<script type="text/javascript">
//#region 全局this对象,即可以通过this访问到当前页面中的所有(标签或jquery等)对象,此this没有什么实际意义,也很少会这样使用
this.$.trim();
alert(this.btnFun);
alert(this.window.location);
//#endregion $("#btnTest").click(function () {
alert(this.value); //此this是btnTest标签对象,输出:Test
$("#btnTest2").click(function () {
alert(this.value); //此this是btnTest2标签对象,输出:Test2
});
});
</script> <script type="text/javascript">
function UserInfo(name, age) {
var _mySecret = "Can't tell you!";
this.Name = name;
this.Age = age; this.GetMySecret = function () {
/// <summary>获取我的秘密</summary>
alert(_mySecret);
} this.IntroduceMySelf = function () {
/// <summary>自我介绍</summary>
alert("Hello,My Name is:" + this.Name + ", Age is:" + this.Age);
}
} var userObj = new UserInfo("Tom", 23);
userObj.GetMySecret();
userObj.IntroduceMySelf();
</script>
<br />
</body>
</html>

  

上面的代码,就是我们常见的this关键字的使用,也在其中添加了必要的代码注释,以说明其当前所指代的对象。

  this关键字:可以理解为是对象的指针,其具体所指向(对应)的对象要看其(使用)所处的(上下文)环境。其常见的使用场景,所代表的对象大致可以分为以下两类:

  1.html标签(元素)对象:即在html标签绑定的事件(onclick,onmouseover...)中,this关键字表示当前标签的Dom对象,通过this即可完全控制、操纵此html标签,如:设置其样式或绑定其它事件等。

  2.function(类)对象:首先,你可能会有疑问——为什么叫做function(类)对象?众所周知,javascript不存在类(class)的概念,但它所具有的特性却可以比较好的实现"模拟类",如上面的代码中的:function UserInfo(name, age)方法。在此对象中this关键字可以很自然的理解为当前的function(类)对象,其作用和用法跟面向对象编程语言(如:C#)里的this关键字很类似,所以,UserInfo这个方法(类),如果转换为C#代码,想必你会能更直观的理解。代码如下: 

     public class UserInfo
{
string _mySecret = "Can't tell you!"; public string Name { get; set; }
public int Age { get; set; } public UserInfo(string name, int age)
{
this.Name = name;
this.Age = age;
} public string GetMySecret()
{
return _mySecret;
} public string IntroduceMySelf()
{
return ("Hello,My Name is:" + this.Name + ", Age is:" + this.Age);
}
}

   本文就到此结束,如果还是有疑问的地方,或文中有“误人子弟”的描述,希望大家能留言提出!

谈谈Javascript的this关键字(this is not this)的更多相关文章

  1. 谈谈javaScript

    谈谈javaScript  (杰我学习) 一. 什么是JavaScript       人们通常所说的JavaScript,其正式名称为ECMAScript.这个标准由ECMA组织发展和维护.ECMA ...

  2. 谈谈javascript中的prototype与继承

    谈谈javascript中的prototype与继承 今天想谈谈javascript中的prototype. 通常来说,javascript中的对象就是一个指向prototype的指针和一个自身的属性 ...

  3. 浅谈JavaScript的New关键字

    原型和闭包算是JavaScript中最常见,最难以理解,最容易被当做问题的两个部分,当然还有它们的延伸,如作用域链,继承等等吧,我最近也是各种看,各种翻,记录点自己的心得,写写总会让自己的理解更深一些 ...

  4. [No000069]Javascript中this关键字详解

    Quiz 请看下面的代码,最后alert出来的是什么呢?(chrome下按F12,选择Console直接复制粘贴运行) var name = "Bob"; var nameObj ...

  5. 深入解析Javascript中this关键字的使用

    深入解析Javascript中面向对象编程中的this关键字 在Javascript中this关键字代表函数运行时,自动生成的一个内部对象,只能在函数内部使用.比如: function TestFun ...

  6. 正确理解javascript的this关键字

    javascript有this关键字,它和javascript的执行上下文有着密切的关系,就是说this具体指代什么要根据它的上下文来判断. 一.this和对象的关系    var Person={ ...

  7. 深入理解Javascript之this关键字

    深入理解Javascript之this关键字 作者: Laruence(   ) 本文地址: http://www.laruence.com/2009/09/08/1076.html 转载请注明出处 ...

  8. JavaScript中this关键字的使用比较

    JavaScript中this关键字的使用比较 this关键字在JavaScript中,用的不能说比较多,而是非常多.那么熟悉this关键字的各种用法则显得非常关键. this有时候就是我们经常说的上 ...

  9. JavaScript控制流及关键字与C语言之比较

    学习JavaScript控制流及关键字概念前,对有过C语言学习经验的同学来说,那么关键字,控制语句概念并不陌生.我们先来看看C语言吧: C语言的32个关键字和9种控制语句 9种控制语句: if.if- ...

随机推荐

  1. Ruby(Selenium / Rspec)在Windows 8_64上安装步骤

    1.首先需要下载RubyInstaller.exe程序(下载地址随便都能找到). 如:rubyinstaller-2.2.2-x64.exe 安装好Ruby后,需要更新Gems gem update ...

  2. RobotFrameWork WebService Soap接口测试 (一)

    在做完基于http协议的接口测试之后,开始弄soap协议了,之前有过开发java webservice自动化框架的经验,所以我想着应该并不会很难.对于webservice的简介,服务器端和客户端的开发 ...

  3. MSSQL优化之索引优化

    一.认识索引 (一)深入浅出理解索引结构 实际上,您可以把索引理解为一种特殊的目录.微软的SQL SERVER提供了两种索引:聚集索引(clustered index,也称聚类索引.簇集索引)和非聚集 ...

  4. Turtlebot入门篇

    0.什么是TurtleBot? 我自己的理解就是:TurtleBot是一款移动机器人,就是主要研究让机器人自主决定应该想那个方向走,怎么绕过障碍物,最终到达目的地.与之对应还有很多机器人,比如goog ...

  5. .NET 集合类型性能分析

    集合 Add Insert Remove Item Sort Find List<T> 如果集合重置大小,就是O(1)或O(n) O(n) O(n) O(1) O(n log n),最坏情 ...

  6. 双向循环链表的Java版本实现

    1.单项循环列表 单向循环链表是单链表的另一种形式,其结构特点是链表中最后一个结点的指针不再是结束标记,而是指向整个链表的第一个结点,从而使单链表形成一个环.和单链表相比,循环单链表的长处是从链尾到链 ...

  7. Java虚拟机学习(2):垃圾收集算法

    跟踪收集器 跟踪收集器采用的为集中式的管理方式,全局记录对象之间的引用状态,执行时从一些列GC  Roots的对象做为起点,从这些节点向下开始进行搜索所有的引用链,当一个对象到GC  Roots 没有 ...

  8. 安装ntp服务,并设置ntp客户端

    1.yum安装ntp [root@localhost ~]# yum install ntp 2.修改配置文件 配置文件在/etc/ntp.conf

  9. Hadoop学习笔记:MapReduce框架详解

    开始聊mapreduce,mapreduce是hadoop的计算框架,我学hadoop是从hive开始入手,再到hdfs,当我学习hdfs时候,就感觉到hdfs和mapreduce关系的紧密.这个可能 ...

  10. JuQueen(线段树 lazy)

    JuQueen Time Limit: 5 Sec  Memory Limit: 512 MB Description Input Output Sample Input 10 10 5 state ...