当前位置: 首页 > 图文教程 > 网络编程 > Javascript > JScript中的"this"关键字使用方式补充材料

Javascript
jQuery开发者都需要知道的5个小技巧
Extjs学习笔记之六 面版
Javascript 中的类和闭包
IE6下JS动态设置图片src地址问题
Extjs学习笔记之七 布局
Extjs学习笔记之八 继承和事件基础
Extjs TriggerField在弹出窗口显示不出问题的解决方法
JavaScript中的集合及效率
利用js获取服务器时间的两个简单方法
在html页面上拖放移动标签
了解jQuery技巧来提高你的代码
JavaScript 页面坐标相关知识整理
Javascript UrlDecode函数代码
JQuery 遮罩层实现(mask)实现代码
jQuery 页面 Mask实现代码
Javascript的构造函数和constructor属性
js或css文件后面跟参数的原因说明
将CKfinder整合进CKEditor3.0的新方法
jQuery UI-Draggable 参数集合
jQuery 行级解析读取XML文件(附源码)

Javascript 中的 JScript中的"this"关键字使用方式补充材料


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-12   浏览: 106 ::
收藏到网摘: n/a

在"JavaScript中this关键字使用方法详解"一文中,我曾例举了在JavaScript和JScript中的8种this关键字的方式。这不又发现还有两种this关键字的使用方式当时没有说到,现补充说明一下。并且通过第一种this关键字使用的说明,能让我们更好的理解JavaScript作为Object-Based语言的本质。
一种是和JavaScript类中的定义有关,我们知道当我们定义如下类的时候:

function JSClass()
{
}
JSClass.prototype.m_Properties = 100;
JSClass.prototype.ToString = function()
{
alert(this.m_Properties);
}
方法ToString中的this.m_Properties就是100,那么下面这种定义呢?
function JSClass()
{
}
JSClass.m_Properties = -100;
JSClass.ToString()
{
alert(this.m_Properties);
}
这时ToString中的这个this.m_Properties是啥?是-100。一定吗?这个不一定了,这得看我们怎么调用这个ToString方法。
JSClass.ToString();
var fun = JSClass.ToString();
fun();
这时的运行结果居然是:-100和undefined。真是郁闷哈,怎么才能运行fun得到-100呢?需要这样来为fun赋值:
var fun = function() { JSClass.ToString(); }
fun();
呵呵,这样就是-100了。好像挺废话的,最终不还是调用的JSClass.ToString()吗?这个我们后面再说,看看把这两个JSClass合在一起是什么情况呢?

function JSClass()
{
}
JSClass.m_Properties = -100;
JSClass.prototype.m_Properties = 100;
JSClass.ToString = function()
{
alert(this.m_Properties);
}
JSClass.prototype.ToString = function()
{
alert(this.m_Properties);
}
这两个ToString()方法,和里面的this关键字它们是什么关系呢?看下面的示例:
var jsclass = new JSClass();
jsclass.ToString();
JSClass.ToString();
结果为:100和-100。这里的jsclass实际上是JavaScript的语言机制,通过new关键字的说明来创建的一个新的实例。而JSClass是什么呢?他们本就是对象实例,只是长得像个函数,也像一个类的说明。对于this的问题,第一个jsclass.ToString()方法里的this是指新创建实例,而JSClass.ToString()方法里的this是值得JSClass这个对象实例。
理解了这两个this所指代的东西的不同本质,也就能更好的明白,为什么JavaScript叫做Object-Based的语言,而更加清楚它和Object-Oriented语言的本质区别。
回头再说一下补充第二中this的使用方法,就是在使用eval方法的时候,这个时候的this是什么呢?看看:
alert(this === eval("this"));
的结果是什么?是true!这是因为eval内代码被执行的作用域就是当前页面本身的说。