帮助理解this用法的几个例子

转载 2013年12月04日 22:31:39

真正去解释this这个东西的时候,才发现不是这么简单,花了一些时间,写了几个小demo,让我们来一探究竟。恩,以人为镜,可知得失,看来这句话是很有道理的。

如果是一个全局的function,则this相当于window对象,在function里定义的各种属性或者方法可以在function外部访问到,前提是这个function需要被调用。

01 <script type="text/javascript">
02         //在function中使用this
03         function a() {
04             if (this == window) {
05                 alert("this == window");
06                 this.fieldA = "I'm a field";
07                 this.methodA = function() {
08                     alert("I'm a function ");
09                 }
10             }
11         }
12
13         a();    //如果不调用a方法,则里面定义的属性会取不到
14         alert(window.fieldA);
15         methodA();    
16 </script>

如果使用new的方式去实例化一个对象,则this不等于window对象,this指向function a的实例:

01 <script type="text/javascript">
02         //在function中使用this之二
03         function a() {
04             if (this == window) {
05                 alert("this == window");
06             }
07             else {
08                 alert("this != window");
09             }
10             this.fieldA = "I'm a field";
11         }
12         var b = new a();
13         alert(b.fieldA);
14         
15 </script>

使用prototype扩展方法可以使用this获取到源对象的实例,私有字段无法通过原型链获取:

01 <script type="text/javascript">
02         //在function中使用this之三
03         function a() {
04             this.fieldA = "I'm a field";
05             var privateFieldA = "I'm a var";
06         }
07          
08         a.prototype.ExtendMethod = function(str) {
09             alert(str + " : " this.fieldA);
10             alert(privateFieldA);   //出错
11         };
12         var b = new a();
13         b.ExtendMethod("From prototype"); 
14 </script>

不管是直接引用function,还是实例化一个function,其返回的闭包函数里的this都是指向window。

01 <script type="text/javascript">
02         //在function中使用this之四
03         function a() {
04             alert(this == window);
05             var that = this;
06             var func = function() {
07                 alert(this == window);
08                 alert(that);
09             };
10             return func;
11         }
12          
13         var b = a();
14         b();
15         var c = new a();
16         c();
17 </script>

在HTML中使用this,一般代表该元素本身:

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

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

01 <div id="div">Click Me</div>
02     <script type="text/javascript">     
03         var div = document.getElementById("div");
04         if (div.attachEvent) {
05             div.attachEvent("onclick"function() {
06                 alert(this == window);
07                 var e = event;
08                 alert(e.srcElement == this);
09             });
10         }
11         if (div.addEventListener) {
12             div.addEventListener("click"function(e) {
13             alert(this == window);
14             e = e;
15             alert(e.target == this);
16             }, false);
17         }
18     </script>

MVC中HtmlHelper用法大全参考

MVC中HtmlHelper用法大全参考   解析MVC中HtmlHelper控件7个大类中各个控件的主要使用方法(1) 2012-02-27 16:25 HtmlHelper类在...
  • li_xiao_ming
  • li_xiao_ming
  • 2013年08月21日 09:54
  • 9652

如何利用几何画板辅助数学教学

几何画板软件提供充分的手段帮助用户实现其教学思想,只需要熟悉软件的简单的使用技巧即可自行设计和编写应用范例,范例所体现的并不是编者的计算机软件技术水平,而是教学思想和教学水平,可以说几何画板是最出色的...
  • EducationSoft
  • EducationSoft
  • 2016年04月05日 17:17
  • 1102

VS2010出现“为帮助内容存储区指定的位置无效或者您无权访问该位置”的解决办法

VS2010出现“为帮助内容存储区指定的位置无效或者您无权访问该位置”的解决办法 打开X:\Program Files\Microsoft Help Viewer\v1.0(X为系统所在...
  • fengzizhuang
  • fengzizhuang
  • 2013年06月23日 10:56
  • 2809

几个小例子让你分清super和this

首先让我们来看以下this和super都有什么功能: this: 访问本类对象成员变量 this.变量名 调用本类普通方法 this.方法名(参数) 本类构造方法调用本类其他构造 本类构造方法...
  • u013046774
  • u013046774
  • 2016年03月18日 22:48
  • 730

小例子分享JAVA“this”的用法

我知道很多朋友都和我一样:在JAVA程序中似乎经常见到“this”,自己也偶尔用到它,但是到底“this”该怎么用,却心中无数!很多人一提起它,就说“当前对象”,可到底什么是当前对象,是什么当前对象,...
  • fbz123456
  • fbz123456
  • 2016年03月15日 10:13
  • 172

关于可变参数va系列函数用法的几个例子

  • 2010年06月15日 14:24
  • 7KB
  • 下载

JavaScript中几个重要的属性(this、constructor、prototype)介绍

JavaScript中几个重要的属性(this、constructor、prototype)介绍 作者: 字体:[增加 减小] 类型:转载 时间:2013-05-19 我要评论 thi...
  • evilcry2012
  • evilcry2012
  • 2016年02月26日 11:09
  • 204

shared_from_this 几个值得注意的地方

shared_from_this()是enable_shared_from_this的成员 函数,返回shared_ptr。首先需要注意的是,这个函数仅在shared_ptr的构造函数被调用之后才能使...
  • u012398613
  • u012398613
  • 2016年08月18日 18:39
  • 265

php类中的$this,static,final,const,self这几个关键字使用方法

本篇文章主要分项了一下关于php类中的this,static,final,const,self这几个关键字使用方法。this,static,final,const,self这几个关键字使用方法。 ...
  • sinat_19569023
  • sinat_19569023
  • 2015年04月23日 16:13
  • 424

synchronized(this)的几个简单示例

一、当两个并发线程访问同一个对象object中的这个synchronized(this)同步代码块时,一个时间内只能有一个线程得到执行。另一个线程必须等待当前线程执行完这个代码块以后才能执行该代码块。...
  • guchuanlong
  • guchuanlong
  • 2012年06月29日 16:19
  • 231
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:帮助理解this用法的几个例子
举报原因:
原因补充:

(最多只允许输入30个字)