- 浏览: 1505077 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (798)
- struts2 (42)
- servlet (20)
- quartz (4)
- jquery & ajax (24)
- tomcat (5)
- javascript (15)
- struts1 (8)
- 搜索关键字及链接 (3)
- fckeditor (3)
- Apache (5)
- spring (22)
- linux (3)
- 企业应用 (8)
- 综合应用 (13)
- 服务器 (2)
- 数据库 (85)
- 性能调优 (21)
- 网络应用 (15)
- 缓存技术 (8)
- 设计模式 (39)
- 面试题 (7)
- 程序人生&前辈程序员 (29)
- java基础 (59)
- hibernate (75)
- log4j (4)
- http (11)
- 架构设计 (28)
- 网页设计 (12)
- java邮件 (4)
- 相关工具 (11)
- ognl (7)
- 工作笔记 (18)
- 知识面扩展 (12)
- oracle异常 (1)
- 正则表达式 (2)
- java异常 (5)
- 项目实践&管理 (1)
- 专业术语 (11)
- 网站参考 (1)
- 论坛话题 (2)
- web应用 (11)
- cxf&webservice (22)
- freemarker (3)
- 开源项目 (9)
- eos (1)
- ibatis (6)
- 自定义标签 (3)
- jsp (3)
- 内部非公开文档(注意:保存为草稿) (0)
- 国内外知名企业 (2)
- 网店 (3)
- 分页 (1)
- 消费者习惯 (2)
- 每日关注 (1)
- 商业信息 (18)
- 关注商业网站 (1)
- 生活常识 (3)
- 新闻 (2)
- xml&JSON (5)
- solaris (1)
- apache.common (3)
- BLOB/CLOB (1)
- lucene (2)
- JMS (14)
- 社会进程 (8)
- SSH扩展 (2)
- 消费心理 (1)
- 珠三角 (1)
- 设计文档 (1)
- XWork&webwork (1)
- 软件工程 (3)
- 数据库及链接 (1)
- RMI (2)
- 国内外知名企业&人物 (1)
最新评论
-
司c马:
简介易懂、
OutputStream和InputStream的区别 -
在世界的中心呼喚愛:
解决我的问题
Java获取客户端的真实IP地址 -
bo_hai:
都是些基本的概念呀!
SSO -
tian_4238:
哥们,你也是搞水利这块的吧。
巧用SQLQuery中的addScalar -
loveEVERYday:
java.util.Date、java.sql.Date、java.sql.Time、java.sql.Timestamp小结
this是JavaScript中功能最强大的关键字之一。不幸的是,如果你不知道它具体怎么工作,你将很难正确使用它。
this是面向对象语言中的一个重要概念,在JAVA,C#等大型语言中,this固定指向运行时的当前对象。但是在javascript中,由于 javascript的动态性(解释执行,当然也有简单的预编译过程),this的指向在运行时才确定。这个特性在给我们带来迷惑的同时也带来了编程上的 自由和灵活,结合apply(call)方法,可以使JS变得异常强大。
2.变化的this
在JavaScript中,this通常指向的是我们正在执行的函数本身,或者是指向该函数所属的对象(运行时)。当我们在页面中定义了函数 doSomething()的时候,它的owner是页面,或者是JavaScript中的window对象(或 global对象)。对于一个onclick属性,它为它所属的HTML元素所拥有,this应该指向该HTML元素。
2.1在几种常见场景中this的变化
函数示例
function doSomething ()
{
alert(this.navigator); //appCodeName
this.value = "I am from the Object constructor";
this.style.backgroundColor = "# 000000";
}
1. (A)作为普通函数直接调用时,this指向window对象.
2. (B)作为控件事件触发时
1) inline event registration 内联事件注册 .将事件直接写在HTML代码中(<element
onclick=”doSomething()”>), 此时this指向 window对象 。
2) Traditional event registration 传统事件注册 (DHTML方式).
形如 element.onclick = doSomething; 此时this指向 element对象
3) <element onclick=”doSomething(this)”>作为参数传递可以指向element
3. (C)作为对象使用时this指向当前对象。形如:new doSomething();
4. (D)使用apply 或者call方法时,this指向所传递的对象。
形如:var obj={}; doSomething.apply(obj,new Array(”nothing”); //thisàobj
下面我来阐述如何在事件处理中来使用this,之后我会附加一些this相关的例子。
Owner
接下来文章中我们将要讨论的问题是:在函数doSomething()中this所指的是什么?
Javascript代码
function doSomething() {
this.style.color = '#cc0000';
}
function doSomething() {
this.style.color = '#cc0000';
}
在JavaScript中,this通常指向的是我们正在执行的函数本身(译者注:用owner代表this所指向的内容),或者是,指向该函数所属的对象。当我们在页面中定义了函数doSomething()的时候,它的owner是页面,或者是JavaScript中的window对象(或 global对象)。对于一个onclick属性,它为它所属的HTML元素所拥有,this应该指向该HTML元素。
这种“所有权”就是JavaScript中面向对象的一种方式。在Objects as associative arrays中可以查看一些更多的信息。
如果我们在没有任何更多准备情况下执行doSomething(),this关键字会指向window,并且该函数试图改变window的 style.color。因为window并没有style对象,这个函数将非常不幸的运行失败,并产生JavaScript错误。
Copying
因此如果我们想充分利用this,我们不得不注意使用this的函数应该被正确的HTML元素所拥有。换句话说,我们应该复制这个函数到我们的onclick属性。Traditional event registration会关心它。
Javascript代码
element.onclick = doSomething;
element.onclick = doSomething;
这个函数被完整复制到onclick属性(现在成为了函数)。因此如果这个event handler被执行,this将指向HTML元素,并且该元素的颜色得以改变。
这种方法使得我们能够复制这个函数到多个event handler。每次this都将指向正确的HTML元素:
这样你就可以最大限度使用this。每当执行该函数,this所指向的HTML元素都正确响应事件,这些HTML元素拥有doSomething()的一个拷贝。
Referring
然而,如果你使用inline event registration(内联事件注册)
Javascript代码
<element onclick="doSomething()">
<element onclick="doSomething()">
你将不能拷贝该函数!反而这种差异是非常关键的。onclick属性并不包含实际的函数,仅仅是一个函数调用。
Javascript代码
doSomething();
doSomething();
因此,它将声明“转到doSomething()并且执行它”。当我们到达doSomething(),this关键字又重新指向了全局的window对象,函数返回错误信息。
The difference
如果你想使用this来指向HTML元素响应的事件,你必须确保this关键字被写在onclick属性里。只有在这种情况下它才指向event handler所注册的HTML元素。
Javascript代码
element.onclick = doSomething;
alert(element.onclick)
element.onclick = doSomething;
alert(element.onclick)
你将得到
Javascript代码
function doSomething() {
this.style.color = '#cc0000';
}
function doSomething() {
this.style.color = '#cc0000';
}
正如你所见,this关键字被展现在onclick函数中,因此它指向HTML元素。
但是如果执行
Javascript代码
<element onclick="doSomething()">
alert(element.onclick)
<element onclick="doSomething()">
alert(element.onclick)
你将得到
Javascript代码
function onclick() {
doSomething()
}
function onclick() {
doSomething()
}
这仅仅是到doSomething()函数的一个引用。this关键字并没有出现在onclick函数中,因此它不指向HTML元素。
例子--拷贝
下面的例子中,this被写入onclick函数里:
Javascript代码
element.onclick = doSomething
element.addEventListener('click', doSomething, false)
element.onclick = function() {this.style.color = '#cc0000';}
<element onclick="this.sytle.color = '#cc0000';">
element.onclick = doSomething
element.addEventListener('click', doSomething, false)
element.onclick = function() {this.style.color = '#cc0000';}
<element onclick="this.sytle.color = '#cc0000';">
例子--引用
下述情况中,this指向window:
Javascript代码
element.onclick = function() {doSomething()}
element.attachEvent('onclick', doSomething)
<element onclick="doSomething()">
element.onclick = function() {doSomething()}
element.attachEvent('onclick', doSomething)
<element onclick="doSomething()">
注意attachEvent()的出现。Microsoft event registration model最主要的弊端是attachEvent()创建了一个指向函数的引用,而不是复制它。因此有时不可能知道哪个HTML正在处理该事件。
组合使用
当使用内联事件注册时,你可以将this发送到函数以至于可以正常使用:
Javascript代码
<element onclick="doSomething(this)">
function doSomething(obj) {
//this出现在event handler中并被发送到函数
//obj指向HTML元素,因此可以这样:
obj.style.color = '#cc0000';
}
发表评论
-
JavaScript经典效果集锦
2011-06-14 10:10 1321JavaScript经典效果集锦.txt -
浏览器状态栏信息来回移动
2011-06-09 22:49 1304附件 -
常用函数手册
2011-06-06 22:32 12461、http://www.phpx.com/man/dhtml ... -
扩展基于prototype的validation.js
2010-10-29 08:40 1266validation.js是一个基于prototype表单前端 ... -
js大全
2010-09-29 10:42 1693以下方法仅供参考,若用js实现可能更简单。 js大全 ... -
常用js语句——大全
2010-09-29 09:56 14811.document.write("" ... -
test 方法
2010-09-20 20:57 1196test 方法 返回一个 Boolean ... -
JavaScript最常用的55个经典技巧
2010-07-26 14:10 13581. oncontextmenu="window.e ... -
知识小点心
2010-07-16 13:31 12681、<script src="<%=re ... -
JavaScript window.setTimeout() 的详细用法
2010-06-17 10:30 1540例子: <script type="text ... -
javascript中的中文字符串比较
2010-06-17 10:13 1605使用如下方法if("中文比较".charC ... -
文本框设置默认值颜色
2010-06-17 10:06 3026<!DOCTYPE html PUBLIC " ... -
如何更合理的利用Java中的异常抛出
2010-06-12 14:20 1386以前,我觉得编程语言 ... -
13个增强Web设计界面的Javascript脚本
2010-06-12 14:15 1458Javascript能让Web设计更具交互性、更美观和更方便的 ...
相关推荐
在本文中,我们将深入探讨`this`关键字的用法,通过示例程序来帮助理解其功能和应用场景。 首先,`this`关键字是一个隐式指针,它指向当前对象实例。当你在类的方法或属性中引用一个成员时,如果该成员与方法参数或...
在编程领域,尤其是Java语言中,`this`关键字是一个至关重要的概念,对于初学者来说,理解和掌握它的用法是基础且必要的。`this`关键字在Java中...所以,"this用法很重要",这句话是对Java编程初学者的一个重要提醒。
Java this用法 概述:Java 中的 this 关键字是一种特殊的引用变量,它总是指向当前对象本身。this 关键字可以用来访问当前对象的成员变量、方法和构造方法。在 Java 中,this 关键字有多种用法,本文将详细介绍 ...
Java 中 this 用法 在 Java 中,this 是一个关键字,随处可见,用法也多。当全局变量跟局部变量重名时,表示使用全局变量(此时 this ...如果我们要使用外部类 A 的方法和变量的话,则应该加上外部类的类名 A.this。
JAVA this用法详解 在 Java 编程语言中,this 关键字是一个非常重要的概念,它有多种用法,但基本上可以归纳为三种:表示当前对象的引用、表示类的成员变量和在构造方法中引用满足指定参数类型的构造器。下面将详细...
在 Java 中,定义一个类时,我们可以使用 this 关键字来访问类中的属性和方法。例如: ```java public class ThisDemo { String name = "Mick"; public void print(String name) { System.out.println("类中的...
### JavaScript中的`this`用法详解 在JavaScript中,`this`关键字的使用十分常见,但也是最容易引起混淆的部分之一。正确理解`this`的工作原理对于编写高效、可靠的代码至关重要。本文将深入探讨`this`在不同上下...
下面我们将深入探讨`this`的使用方法。 1. **全局作用域与浏览器环境**: 在浏览器环境中,如果`this`在全局作用域中被引用,它通常会指向`window`对象。在Node.js环境下,`this`则默认指向`global`对象。 2. **...
js对象定义及this用法.docx
js对象定义及this用法.pdf
- **调用成员变量**:在类的方法中,如果需要访问一个非静态成员变量,可以使用`this`关键字前缀,例如`this.MyVariable`。这有助于避免与局部变量名称的冲突。 - **调用成员方法**:同样,我们也可以通过`this`...
在类的成员方法中,可以使用 this 来直接引用当前对象的成员变量或方法。例如: ```java class Test { private int x, y; public Test(int x, int y) { setX(x); // 也可以写为 this.setX(x); } } ``` 在上面...
DoPrint(Employee emp) { Console.WriteLine("Name: {0}, Age: {1}", emp.Name, emp.Age);...通过掌握 `base` 和 `this` 的用法,我们可以更好地利用继承机制,管理对象状态,并实现更灵活的代码结构。
JavaScript中的对象定义与`this`关键字的用法是编程中非常关键的概念,特别是在构建复杂的应用时。`this`关键字在JavaScript中用来引用当前上下文的对象,它的行为有时可能与传统面向对象语言(如Java)有所不同。 ...
- **限制**:`base`只能在派生类的构造函数、实例方法或实例属性访问器中使用,不能在静态方法中使用,因为静态方法不与特定实例关联。 2. `this`关键字: `this`关键字代表当前对象的引用,它在以下几个方面非常...
本文实例讲述了js中this用法。分享给大家供大家参考。具体如下: 1. 指向window 全局变量 alert(this) //返回 [object Window] 全局函数 function sayHello(){ alert(this); } sayHello(); 2. ...
在Java编程语言中,"this"是一个非常关键的引用关键字,它主要用来引用当前对象的实例变量,并在方法、构造器或初始化块中使用。理解并熟练运用"this"是成为一名合格的Java开发者的重要一步。下面我们将深入探讨...
### this的用法以及改变this指向 #### 为什么学习this? 在JavaScript中,`this`关键字的使用极为广泛。理解并掌握`this`的工作机制对于提高编程能力至关重要: 1. **阅读代码的能力**:不了解`this`的工作原理,...
在JavaScript编程语言中,...总结起来,JavaScript中的this用法是多样的,理解其行为并学会在不同场景下正确使用this是JavaScript开发者必备的技能。通过深入学习和实践,你将能够更有效地控制代码中的对象和函数行为。