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异步表单提交,图片上传,兼容异步模拟ajax技术
May 10 Javascript
js确定对象类型方法
Mar 30 Javascript
关于JavaScript的面向对象和继承有利新手学习
Jan 11 Javascript
JS实现登录页面记住密码和enter键登录方法推荐
May 10 Javascript
移动端滑动插件Swipe教程
Oct 16 Javascript
Angular2  NgModule 模块详解
Oct 19 Javascript
jQuery实现搜索页面关键字的功能
Feb 16 Javascript
基于angular实现三级联动的生日插件
May 12 Javascript
详解Webpack+Babel+React开发环境的搭建的方法步骤
Jan 09 Javascript
vuejs使用axios异步访问时用get和post的实例讲解
Aug 09 Javascript
详解webpack自定义loader初探
Aug 29 Javascript
小谈angular ng deploy的实现
Apr 07 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
用session做客户验证时的注意事项
2006/10/09 PHP
Windows中使用计划任务自动执行PHP程序实例
2014/05/09 PHP
PHP实现腾讯与百度坐标转换
2017/08/05 PHP
PHP性能测试工具xhprof安装与使用方法详解
2018/04/29 PHP
JavaScript DOM学习第八章 表单错误提示
2010/02/19 Javascript
图片延迟加载的实现代码(模仿懒惰)
2013/03/29 Javascript
jQuery实现自定义下拉列表
2015/01/05 Javascript
js实现ifram取父窗口URL地址的方法
2015/02/09 Javascript
jquery实现多条件筛选特效代码分享
2015/08/28 Javascript
web前端开发JQuery常用实例代码片段(50个)
2015/08/28 Javascript
详谈javascript异步编程
2016/02/21 Javascript
JS图片轮播与索引变色功能实例详解
2017/07/06 Javascript
Angular.js前台传list数组由后台spring MVC接收数组示例代码
2017/07/31 Javascript
nodejs 图解express+supervisor+ejs的用法(推荐)
2017/09/08 NodeJs
详谈js中标准for循环与foreach(for in)的区别
2017/11/02 Javascript
Vue 中批量下载文件并打包的示例代码
2017/11/20 Javascript
vue组件传递对象中实现单向绑定的示例
2018/02/28 Javascript
JS块级作用域和私有变量实例分析
2019/05/11 Javascript
vue实现购物车列表
2020/06/30 Javascript
浅析我对JS延迟异步脚本的思考
2020/10/12 Javascript
Python连接mssql数据库编码问题解决方法
2015/01/01 Python
pip matplotlib报错equired packages can not be built解决
2018/01/06 Python
一条命令解决mac版本python IDLE不能输入中文问题
2018/05/15 Python
Python3+django2.0+apache2+ubuntu14部署网站上线的方法
2018/07/07 Python
python模块导入的细节详解
2018/12/10 Python
Python安装与基本数据类型教程详解
2019/05/29 Python
详解Python并发编程之创建多线程的几种方法
2019/08/23 Python
新手入门学习python Numpy基础操作
2020/03/02 Python
Feelunique德国官方网站:欧洲最大的在线美容零售商
2019/07/20 全球购物
北京泡泡网网络有限公司.net面试题
2012/07/17 面试题
招聘与培训专员岗位职责
2014/01/30 职场文书
乡镇办公室工作决心书
2014/03/11 职场文书
社区平安建设方案
2014/05/25 职场文书
体育课外活动总结
2014/07/08 职场文书
教师党的群众路线教育实践活动个人整改方案
2014/10/31 职场文书
详解pytorch创建tensor函数
2022/03/22 Python