帮助理解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>

相关文章推荐

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

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

synchronized(this)的几个简单示例

一、当两个并发线程访问同一个对象object中的这个synchronized(this)同步代码块时,一个时间内只能有一个线程得到执行。另一个线程必须等待当前线程执行完这个代码块以后才能执行该代码块。...

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

本篇文章主要分项了一下关于php类中的this,static,final,const,self这几个关键字使用方法。this,static,final,const,self这几个关键字使用方法。 ...

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

JavaScript中几个重要的属性(this、constructor、prototype)介绍 作者: 字体:[增加 减小] 类型:转载 时间:2013-05-19 我要评论 thi...

shared_from_this 几个值得注意的地方

shared_from_this()是enable_shared_from_this的成员 函数,返回shared_ptr。首先需要注意的是,这个函数仅在shared_ptr的构造函数被调用之后才能使...

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

this  this表示当前对象,如果在全局作用范围内使用this,则指代当前页面对象window; 如果在函数中使用this,则this指代什么是根据运行时此函数在什么对象上被调用。 我们还可以使...

javascript 直接创建对象与间接创建对象 私有函数不能访问this变量 是否使用var声明变量几个问题探讨

var a = 'a1'; var b = 'b1' function getA(){ alert('1A') } var student = function (name,age){ this...

php面向对象类中的$this,static,final,const,self及双冒号 :: 这几个关键字使用方法。

php中this,self,parent三个关键字的作用 this,self,parent三个关键字之间的区别,从字面上比较好理解,分别是指这、自己、父亲。我们先建立几个概念,这三个关键字分别是用...
  • tham_
  • tham_
  • 2014年12月20日 12:23
  • 3470

java中几个关键字 this static final

简单介绍java中this,final,static用法
  • stardhb
  • stardhb
  • 2015年12月04日 09:24
  • 299
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:帮助理解this用法的几个例子
举报原因:
原因补充:

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