- 浏览: 1051485 次
- 性别:
- 来自: 广州
文章分类
- 全部博客 (1355)
- test (75)
- 红茶和绿茶 (1)
- Jave SE (206)
- Oracle (19)
- English (177)
- Log4j (5)
- RIA(Rich Internet Applications) (9)
- Ext Js (6)
- Android (14)
- Logo (0)
- 文字采撷 (287)
- 使用技巧 (92)
- Project Management (22)
- Hibernate (12)
- Struts (5)
- 规则引擎 (1)
- Html & Javasctipt (56)
- Spring MVC (10)
- Maven (17)
- Java Test (17)
- Linux (16)
- Tools (1)
- CV (0)
- Middleware (2)
- HTML5 (2)
- Algorithms (4)
- Web Service (15)
- 留学 (15)
- LADP (5)
- PXCOA (0)
- SysLog (6)
- SSO (3)
- Spring Security (4)
- Spring Batch (1)
- Jmail (1)
- Bible (4)
- Java Thread (5)
- Architect (6)
- github (2)
- Java Swing (12)
- NoSQL (7)
- UML (2)
- 敏捷(Agile) (7)
- Hudson+Maven+SVN (15)
- cloud computing (2)
- Bahasa Indonesia (1)
- jBPM (6)
- 民俗知识 (3)
- Consulting (1)
- Mysql (5)
- SAP (1)
- 微信公众平台接口开发 (3)
- 做生意 (1)
- 西餐 (1)
- Banking (1)
- Flex (0)
- 黄金投资 (1)
- Apache Tomcat 集群 (3)
- Hadoop (7)
- 需求分析 (1)
- 银行知识 (3)
- 产品管理 (2)
- 钢琴Music (3)
- 设计 (3)
- Marketing (2)
- US Life (3)
- 算法 (14)
- BigData (4)
- test红茶和绿茶Jave SEOracleEnglishLog4jRIA(Rich Internet Applications)Ext JsAndroidLogo文字采撷 (0)
- Design Pattern (5)
- NodeJS&AngularJS (9)
- Python (1)
- Spring boot (0)
- ACM (3)
最新评论
-
心往圣城:
微时代-最专业的微信第三方平台。LBS定位导航,微网站,自定义 ...
微信公众平台 /微信公众平台怎么用 -
zhaojiafan:
return ReverseStr1(str.substrin ...
逆转字符串 Write a String Reverser (and use Recursion!) -
zhaojiafan:
public class StringUtils {
p ...
逆转字符串 Write a String Reverser (and use Recursion!)
在面向对象编程语言中,对于this关键字我们是非常熟悉的。比如C++、C#和Java等都提供了这个关键字
虽然在开始学习的时候觉得比较难,但只要理解了,用起来是非常方便和意义确定的。JavaScript也提供了这个this关键字,不过用起来就比经典OO语言中要"混乱"的多了。
下面就来看看,在JavaScript中各种this的使用方法有什么混乱之处?
1、在HTML元素事件属性中inline方式使用this关键字:
<div onclick="
// 可以在里面使用this
">division element</div>
我们一般比较常用的方法是在此使用:javascirpt: EventHandler(this),这样的形式。不过这里其实可以写任何合法的JavaScript语句,要是高兴在此定义个类也可以(不过将会是个内部类)。这里的原理是脚本引擎生成了一个div实例对象的匿名成员方法,而onclick指向这个方法。
2、用DOM方式在事件处理函数中使用this关键字:
<div id="elmtDiv">division element</div>
<script language="javascript">
var div = document.getElementById('elmtDiv');
div.attachEvent('onclick', EventHandler);
function EventHandler()
{
// 在此使用this
}
</script>
这时的EventHandler()方法中的this关键字,指示的对象是IE的window对象。这是因为EventHandler只是一个普通的函数,对于attachEvent后,脚本引擎对它的调用和div对象本身没有任何的关系。同时你可以再看看EventHandler的caller属性,它是等于null的。如果我们要在这个方法中获得div对象引用,应该使用:this.event.srcElement。
3、用DHTML方式在事件处理函数中使用this关键字:
<div id="elmtDiv">division element</div>
<script language="javascript">
var div = document.getElementById('elmtDiv');
div.onclick = function()
{
// 在此使用this
};
</script>
这里的this关键字指示的内容是div元素对象实例,在脚本中使用DHTML方式直接为div.onclick赋值一个EventHandler的方法,等于为div对象实例添加一个成员方法。这种方式和第一种方法的区别是,第一种方法是使用HTML方式,而这里是DHTML方式,后者脚本解析引擎不会再生成匿名方法。
4、类定义中使用this关键字:
function JSClass()
{
var myName = 'jsclass';
this.m_Name = 'JSClass';
}
JSClass.prototype.ToString = function()
{
alert(myName + ', ' + this.m_Name);
};
var jc = new JSClass();
jc.ToString();
这是JavaScript模拟类定义中对this的使用,这个和其它的OO语言中的情况非常的相识。但是这里要求成员属性和方法必须使用this关键字来引用,运行上面的程序会被告知myName未定义。
5、为脚本引擎内部对象添加原形方法中的this关键字:
Function.prototype.GetName = function()
{
var fnName = this.toString();
fnName = fnName.substr(0, fnName.indexOf('('));
fnName = fnName.replace(/^function/, '');
return fnName.replace(/(^\s+)|(\s+$)/g, '');
}
function foo(){}
alert(foo.GetName());
这里的this指代的是被添加原形的类的实例,和4中类定义有些相似,没有什么太特别的地方。
6、结合2&4,说一个比较迷惑的this关键字使用:
function JSClass()
{
this.m_Text = 'division element';
this.m_Element = document.createElement('DIV');
this.m_Element.innerHTML = this.m_Text;
this.m_Element.attachEvent('onclick', this.ToString);
}
JSClass.prototype.Render = function()
{
document.body.appendChild(this.m_Element);
}
JSClass.prototype.ToString = function()
{
alert(this.m_Text);
};
var jc = new JSClass();
jc.Render();
jc.ToString();
我就说说结果,页面运行后会显示:"division element",确定后点击文字"division element",将会显示:"undefined"。
7、CSS的expression表达式中使用this关键字:
<table width="100" height="100">
<tr>
<td>
<div style="width: expression(this.parentElement.width);
height: expression(this.parentElement.height);">
division element</div>
</td>
</tr>
</table>
这里的this看作和1中的一样就可以了,它也是指代div元素对象实例本身。
8、函数中的内部函数中使用this关键字:
function OuterFoo()
{
this.Name = 'Outer Name';
function InnerFoo()
{
var Name = 'Inner Name';
alert(Name + ', ' + this.Name);
}
return InnerFoo;
}
OuterFoo()();
运行结果显示是:"Inner Name, Outer Name"。按我们在2中的讲解,这里的结果如果是"Inner Name, undefined"似乎更合理些吧?但是正确的结果确实是前者,这是由于JavaScript变量作用域的问题决定的 详细了解推荐参看"原来JScript中的关键字'var'还是有文章的"一文及回复
详细出处参考:http://www.jb51.net/article/17584.htm
发表评论
-
ECMAScript 6 Babel
2017-11-09 03:52 392https://babeljs.io/learn-es201 ... -
Javascript模块化编程(一):模块的写法
2016-11-04 04:42 394随着网站逐渐变成"互联网应用程序",嵌入 ... -
CommonJS Modules/1.0 规范
2016-11-04 03:02 602译者:CommonJS Modules/1.0 ... -
测试框架 Mocha 实例教程
2016-10-28 10:23 686Mocha(发音"摩卡")诞生于2011 ... -
Node.js Tutorial for Beginners
2016-09-11 08:49 445https://www.youtube.com/wat ... -
The MVC and MVVM Patterns
2016-08-11 09:44 384Single-Page Applications (SPAs ... -
10 Reasons Why You Should Use AngularJS
2016-08-11 09:28 3981. MVC done right Most framew ... -
Angularjs JS Parse JSON
2016-08-08 11:46 624<!DOCTYPE html> <htm ... -
JavaScript == === 区别
2016-08-01 14:03 456首先,== equality 等同, ... -
angularjs
2016-06-17 13:23 439七步从Angular.JS菜鸟到专家 ng ... -
AngularJS 视频教程
2016-05-03 08:35 686http://down.51cto.com/data/1040 ... -
Bootstrap Get Started 前台框架 可以适应多种平台
2015-09-12 05:15 471Bootstrap Get Started ... -
零基础学HTML 5实战开发(第一季)
2015-06-04 18:41 456http://edu.csdn.net/course/det ... -
show or hidden DIV
2014-03-28 09:51 501<SCRIPT type="text/jav ... -
总结:JSP页面img图片缓存问题现象表述及问题解决
2014-03-04 10:18 553JSP页面img图片缓存问题现象表述及问题解决 l 问 ... -
JS print
2014-03-03 17:01 778<input id="btnPrint&q ... -
javascript create html table
2014-01-22 18:33 754<html> <head> ... -
jQuery Validation Plugin
2013-10-22 13:52 547jQuery Validation Plugin 1.9.0 -
For 语训中心
2013-10-20 21:26 496<BR> <BR> < ... -
IE input file fakepath solution
2013-10-14 17:56 0<!DOCTYPE HTML> <ht ...
相关推荐
本文将深入探讨JavaScript中`this`关键字的多种使用场景,并对比其他面向对象语言中的`this`。 首先,了解`this`在传统的面向对象编程语言中的用途。在C++、C#、Java等语言中,`this`关键字被用于指向当前对象的...
### JavaScript面向对象进阶知识点详解 #### 8.1 面向对象编程的基本特性 在探讨面向对象的JavaScript之前,我们首先需要了解面向对象编程(Object-Oriented Programming, OOP)的基本特性:封装性、抽象性、继承...
在JavaScript中,面向对象编程(Object-Oriented Programming,简称OOP)是一种核心特性,它允许开发者创建复杂的、可复用的对象结构。本文将深入探讨JavaScript中的面向对象继承,这是理解JavaScript OOP的关键部分...
### JavaScript面向对象编程详解 #### 一、引言 JavaScript作为一种广泛使用的脚本语言,在Web开发领域占据着举足轻重的地位。尽管JavaScript本质上是一种基于原型的语言,但它也支持面向对象编程的一些特性,使得...
### JavaScript面向对象编程详解 #### 引言 在软件工程领域,面向对象编程(OOP)是一种编程范式,它使用“对象”来设计软件。每个对象都可以包含数据(属性)和方法(行为)。JavaScript虽然起初并非为面向对象...
然而,`this` 在 JavaScript 中的行为并不像在其他一些静态类型的面向对象语言中那样直观,这经常导致初学者和经验丰富的开发者都感到困惑。 ### 示例分析 首先,让我们通过几个示例来理解 `this` 的工作原理: 1...
### JavaScript面向对象编程详解 #### 一、JavaScript面向对象编程简介 JavaScript作为一种广泛使用的脚本语言,虽然起源于一种简单的浏览器脚本环境,但随着时间的发展,它已经演变为一种功能强大的编程语言,...
`this`指针是JavaScript中一个极其重要的概念,理解其工作原理对于有效地编写面向对象的JavaScript代码至关重要。通过掌握`this`的动态性质和作用域规则,开发者可以避免常见的错误,如`this`未按预期引用对象的问题...
### JavaScript面向对象编程详解 #### 一、面向对象的基本概念 面向对象编程(Object-Oriented Programming, OOP)是一种程序设计范式,其核心思想是将数据与处理这些数据的方法封装在一起,形成一个个对象。在...
面向对象编程(Object-Oriented Programming, OOP)是JavaScript的核心特性之一,它提供了多种模式来创建和操作对象。以下是对标题和描述中提到的几种JavaScript面向对象编程模式的详细解释: 1. **构造函数与字面...
### JavaScript面向对象编程详解 #### 一、JavaScript与面向对象编程 JavaScript虽然是一种基于对象的语言,但其设计并不像传统的面向对象编程语言那样拥有明确的类(class)概念。这使得在JavaScript中实现面向...
### JavaScript面向对象编程详解 #### 一、引言 随着Web技术的发展,特别是Ajax的兴起,JavaScript作为一种在浏览器端执行的脚本语言,其地位变得越来越重要。在现代Web应用中,JavaScript不再仅仅用于简单的页面...
在JavaScript中,`this`对象是一个至关重要的概念,它在不同上下文中扮演着不同的角色,帮助开发者实现面向对象的编程。`this`的值取决于函数调用的方式,而不是函数的定义位置。以下是对`this`对象的详细解释: 1....