JavaScript中的this实例分析

 更新时间:2011年04月28日 00:49:57   转载 作者:  
做web开发几年,也认为自己的js写了不少,可真正去解释这个东西的时候,才发现不是这么简单,花了一些时间,写了几个小demo,让我们来一探究竟。
以人为镜,可知得失,看来这句话是很有道理的。

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

复制代码 代码如下:

<script type="text/javascript">
//在function中使用this
function a() {
if (this == window) {
alert("this == window");
this.fieldA = "I'm a field";
this.methodA = function() {
alert("I'm a function ");
}
}
}
a(); //如果不调用a方法,则里面定义的属性会取不到
alert(window.fieldA);
methodA();
</script>

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

<script type="text/javascript">
//在function中使用this之二
function a() {
if (this == window) {
alert("this == window");
}
else {
alert("this != window");
}
this.fieldA = "I'm a field";
}
var b = new a();
alert(b.fieldA);
</script>

Demo 3 :
使用prototype扩展方法可以使用this获取到源对象的实例,私有字段无法通过原型链获取
复制代码 代码如下:

<script type="text/javascript">
//在function中使用this之三
function a() {
this.fieldA = "I'm a field";
var privateFieldA = "I'm a var";
}
a.prototype.ExtendMethod = function(str) {
alert(str + " : " + this.fieldA);
alert(privateFieldA); //出错
};
var b = new a();
b.ExtendMethod("From prototype");
</script>

Demo 4 :
不管是直接引用function,还是实例化一个function,其返回的闭包函数里的this都是指向window
复制代码 代码如下:

<script type="text/javascript">
//在function中使用this之四
function a() {
alert(this == window);
var that = this;
var func = function() {
alert(this == window);
alert(that);
};
return func;
}
var b = a();
b();
var c = new a();
c();
</script>

Demo 5 :
在HTML中使用this,一般代表该元素本身
复制代码 代码如下:

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

Demo 6 :
在IE和火狐(Chrome)下注册事件,this分别指向window和元素本身
复制代码 代码如下:

<div id="div">Click Me</div>
<script type="text/javascript">
var div = document.getElementById("div");
if (div.attachEvent) {
div.attachEvent("onclick", function() {
alert(this == window);
var e = event;
alert(e.srcElement == this);
});
}
if (div.addEventListener) {
div.addEventListener("click", function(e) {
alert(this == window);
e = e;
alert(e.target == this);
}, false);
}
</script>

以上就是我总结的this在javascript中的不同应用场景,可能还有其他的情况不一而足,以后发现了会补充进来。

相关文章

  • JS判断是否长按某一键的方法

    JS判断是否长按某一键的方法

    这篇文章主要介绍了JS判断是否长按某一键的方法,涉及JavaScript针对键盘按键的判断及响应操作技巧,需要的朋友可以参考下
    2016-03-03
  • JavaScript加强之自定义event事件

    JavaScript加强之自定义event事件

    event事件在本文以自定义的方式出现,感兴趣的朋友可以参考下,希望对大家有所帮助
    2013-09-09
  • JS实现选中当前菜单后高亮显示的导航条效果

    JS实现选中当前菜单后高亮显示的导航条效果

    这篇文章主要介绍了JS实现选中当前菜单后高亮显示的导航条效果,涉及JavaScript针对页面元素的遍历及样式动态操作技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-10-10
  • javascript面向对象之定义成员方法实例分析

    javascript面向对象之定义成员方法实例分析

    这篇文章主要介绍了javascript面向对象之定义成员方法,实例分析了成员方法的定义与使用技巧,需要的朋友可以参考下
    2015-01-01
  • BootStrap实现邮件列表的分页和模态框添加邮件的功能

    BootStrap实现邮件列表的分页和模态框添加邮件的功能

    这篇文章主要介绍了bootstrap分页,模态框,实现邮件列表的分页,和模态框添加邮件的功能的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2016-10-10
  • 移动端H5页面返回并刷新页面(BFcache)的方法

    移动端H5页面返回并刷新页面(BFcache)的方法

    这篇文章主要给大家介绍了关于移动端H5页面返回并刷新页面(BFcache)的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-11-11
  • bootstrap table配置参数例子

    bootstrap table配置参数例子

    这篇文章主要为大家详细介绍了bootstrapTable的参数设置,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-01-01
  • js实现ArrayList功能附实例代码

    js实现ArrayList功能附实例代码

    ArrayList功能想必大家都有所了解吧,本文使用js实现ArrayList功能并附实例代码,想学习的朋友可以看看
    2014-10-10
  • Javascript Dom元素获取和添加详解

    Javascript Dom元素获取和添加详解

    这篇文章主要介绍了Javascript Dom元素获取和添加详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-09-09
  • JavaScript中split() 使用方法汇总

    JavaScript中split() 使用方法汇总

    本文向大家重点讲解一下Javascript中split函数使用,它可以将一个字符串分割为子字符串,然后将结果作为字符串数组返回,相信本文介绍你对split函数的用法有明确的认识。
    2015-04-04

最新评论