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


Posted in Javascript onMarch 08, 2007

在"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内代码被执行的作用域就是当前页面本身的说。

Javascript 相关文章推荐
解决iframe的frameborder在chrome/ff/ie下的差异
Aug 12 Javascript
apycom出品的jQuery精美菜单破解方法
Feb 18 Javascript
js打开windows上的可执行文件示例
May 27 Javascript
原生js实现fadein 和 fadeout淡入淡出效果
Jun 05 Javascript
javascript原型模式用法实例详解
Jun 04 Javascript
JavaScript中的原型prototype完全解析
May 10 Javascript
EasyUI 中combotree 默认不能选择父节点的实现方法
Nov 07 Javascript
Bootstrap模态框使用详解
Feb 15 Javascript
基于BootStrap的文本编辑器组件Summernote
Oct 27 Javascript
jquery动态添加以及遍历option并获取特定样式名称的option方法
Jan 29 jQuery
微信小程序实现的picker多级联动功能示例
May 23 Javascript
ES5新增数组的实现方法
May 12 Javascript
function, new function, new Function之间的区别
Mar 08 #Javascript
JavaScript中this关键字使用方法详解
Mar 08 #Javascript
区分JS中的undefined,null,"",0和false
Mar 08 #Javascript
在JavaScript中使用inline函数的问题
Mar 08 #Javascript
JS类中定义原型方法的两种实现的区别
Mar 08 #Javascript
JavaScript语言中的Literal Syntax特性分析
Mar 08 #Javascript
从JavaScript的函数重名看其初始化方式
Mar 08 #Javascript
You might like
PHP 数组和字符串互相转换实现方法
2013/03/26 PHP
php中动态变量用法实例
2015/06/10 PHP
php文件上传类完整实例
2016/05/14 PHP
PHP实现的激活用户注册验证邮箱功能示例
2017/06/06 PHP
PHP让网站移动访问更加友好方法
2019/02/14 PHP
Jquery 表单取值赋值的一些基本操作
2009/10/11 Javascript
IE JS无提示关闭窗口不提示的方法
2010/04/29 Javascript
Jquery插件 easyUI属性汇总
2011/01/19 Javascript
js 金额文本框实现代码
2012/02/14 Javascript
javascript客户端遍历控件与获取父容器对象示例代码
2014/01/06 Javascript
js实现超酷的照片墙展示效果图附源码下载
2015/10/08 Javascript
基于jquery实现复选框全选,反选,全不选等功能
2015/10/16 Javascript
JavaScript队列、优先队列与循环队列
2016/11/14 Javascript
bootstrap3-dialog-master模态框使用详解
2017/08/22 Javascript
使用Vue CLI创建typescript项目的方法
2019/08/09 Javascript
Python CSV模块使用实例
2015/04/09 Python
用Python操作字符串之rindex()方法的使用
2015/05/19 Python
Python初学时购物车程序练习实例(推荐)
2017/08/08 Python
Python语言的变量认识及操作方法
2018/02/11 Python
python中字符串变二维数组的实例讲解
2018/04/03 Python
浅谈Django的缓存机制
2018/08/23 Python
Python过滤txt文件内重复内容的方法
2018/10/21 Python
python 2.7 检测一个网页是否能正常访问的方法
2018/12/26 Python
利用python在excel里面直接使用sql函数的方法
2019/02/08 Python
Python unittest单元测试框架及断言方法
2020/04/15 Python
基于django2.2连oracle11g解决版本冲突的问题
2020/07/02 Python
python的scipy.stats模块中正态分布常用函数总结
2021/02/19 Python
Opencv 图片的OCR识别的实战示例
2021/03/02 Python
美国滑雪和滑雪板商店:Buckman
2018/03/03 全球购物
电大会计学自我鉴定
2014/02/06 职场文书
面试自我介绍演讲稿
2014/04/29 职场文书
公司应聘求职信
2014/06/21 职场文书
领导干部学习“三严三实”思想汇报
2014/09/15 职场文书
教师见习总结范文
2015/06/23 职场文书
jupyter notebook保存文件默认路径更改方法汇总(亲测可以)
2021/06/09 Python
Python 阶乘详解
2021/10/05 Python