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 相关文章推荐
JavaScript用JQuery呼叫Server端方法示例代码
Sep 03 Javascript
JavaScript中Date对象的常用方法示例
Oct 24 Javascript
浅析javascript异步执行函数导致的变量变化问题解决思路
May 13 Javascript
实例讲解jQuery中对事件的命名空间的运用
May 24 Javascript
使用Angular缓存父页面数据的方法
Jan 03 Javascript
javascript设计模式之Adapter模式【适配器模式】实现方法示例
Jan 13 Javascript
微信小程序实现图片上传功能实例(前端+PHP后端)
Jan 10 Javascript
vue使用iframe嵌入网页的示例代码
Jun 09 Javascript
Vue中rem与postcss-pxtorem的应用详解
Nov 20 Javascript
JQuery事件冒泡和默认行为代码实例
May 13 jQuery
JS实现简易图片自动轮播
Oct 16 Javascript
解决Antd Table表头加Icon和气泡提示的坑
Nov 17 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框架Phpbean说明
2008/01/10 PHP
解析strtr函数的效率问题
2013/06/26 PHP
php一些错误处理的方法与技巧总结
2013/08/10 PHP
Codeigniter操作数据库表的优化写法总结
2014/06/12 PHP
phpExcel中文帮助手册之常用功能指南
2014/08/18 PHP
javascript+php实现根据用户时区显示当地时间的方法
2015/03/11 PHP
限制文本字节数js代码
2007/03/06 Javascript
JavaScript 学习笔记(十三)Dom创建表格
2010/01/21 Javascript
利用location.hash实现跨域iframe自适应
2010/05/04 Javascript
js 实现在离开页面时提醒未保存的信息(减少用户重复操作)
2013/01/16 Javascript
限制textbox或textarea输入字符长度的JS代码
2013/10/16 Javascript
分享33个jQuery与CSS3实现的绚丽鼠标悬停效果
2014/12/15 Javascript
你有必要知道的25个JavaScript面试题
2015/12/29 Javascript
jQuery qrcode生成二维码的方法
2016/04/03 Javascript
简单解析JavaScript中的__proto__属性
2016/05/10 Javascript
浅谈JavaScript中面向对象的的深拷贝和浅拷贝
2016/08/01 Javascript
jQuery插件EasyUI实现Layout框架页面中弹出窗体到最顶层效果(穿越iframe)
2016/08/05 Javascript
详解JavaScript时间处理之几个月前或几个月后的指定日期
2016/12/21 Javascript
通过函数作用域和块级作用域看javascript的作用域链
2018/08/05 Javascript
JavaScript读取本地文件常用方法流程解析
2020/10/12 Javascript
[06:16]《DAC最前线》之地区预选赛全面回顾
2015/01/19 DOTA
Perl中著名的Schwartzian转换问题解决实现
2015/06/02 Python
Python网络编程中urllib2模块的用法总结
2016/07/12 Python
在Python程序员面试中被问的最多的10道题
2017/12/05 Python
解决python删除文件的权限错误问题
2018/04/24 Python
python向已存在的excel中新增表,不覆盖原数据的实例
2018/05/02 Python
Sanic框架Cookies操作示例
2018/07/17 Python
Python从list类型、range()序列简单认识类(class)【可迭代】
2019/05/31 Python
anaconda如何查看并管理python环境
2019/07/05 Python
学前班教师的自我鉴定
2013/12/05 职场文书
美术第二课堂活动总结
2014/07/08 职场文书
中华在我心中演讲稿
2014/09/13 职场文书
2015年医德考评自我评价
2015/03/03 职场文书
一百条裙子读书笔记
2015/07/01 职场文书
2016年九九重阳节活动总结
2016/04/01 职场文书
LayUI+Shiro实现动态菜单并记住菜单收展的示例
2021/05/06 Javascript