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 相关文章推荐
jQuery中siblings()方法用法实例
Jan 08 Javascript
Jquery 实现图片轮换
Jan 28 Javascript
原生Js实现简易烟花爆炸效果的方法
Mar 20 Javascript
js如何判断输入字符串长度
Dec 16 Javascript
利用Query+bootstrap和js两种方式实现日期选择器
Jan 10 Javascript
JavaScript实现省市县三级级联特效
May 16 Javascript
mui开发中获取单选按钮、复选框的值(实例讲解)
Jul 24 Javascript
初学者AngularJS的环境搭建过程
Oct 27 Javascript
webpack4.x下babel的安装、配置及使用详解
Mar 07 Javascript
详解vue项目中调用百度地图API使用方法
Apr 25 Javascript
js实现列表按字母排序
Aug 11 Javascript
类和原型的设计模式之复制与委托差异
Jul 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
CodeIgniter php mvc框架 中国网站
2008/05/26 PHP
深入PHP内存相关的功能特性详解
2013/06/08 PHP
xss防御之php利用httponly防xss攻击
2014/03/21 PHP
PHP二维数组实现去除重复项的方法【保留各个键值】
2017/12/21 PHP
jquery 选项卡效果 新手代码
2011/07/08 Javascript
基于jQuery实现的百度导航li拖放排列效果,即时更新数据库
2012/07/31 Javascript
jQuery如何实现点击页面获得当前点击元素的id或其他信息
2014/01/09 Javascript
20个实用的JavaScript技巧分享
2014/11/28 Javascript
jQuery中offsetParent()方法用法实例
2015/01/19 Javascript
JavaScript 数组some()和filter()的用法及区别
2016/05/20 Javascript
jquery制做精致的倒计时特效
2016/06/13 Javascript
Bootstrap零基础入门教程(二)
2016/07/18 Javascript
angularjs中的$eval方法详解
2017/04/24 Javascript
Vue2.0 slot分发内容与props验证的方法
2017/12/12 Javascript
玩转Koa之koa-router原理解析
2018/12/29 Javascript
JavaScript和TypeScript中的void的具体使用
2019/09/12 Javascript
微信小程序自定义tabBar在uni-app的适配详解
2019/09/30 Javascript
Python入门篇之文件
2014/10/20 Python
python中循环语句while用法实例
2015/05/16 Python
Python中使用strip()方法删除字符串中空格的教程
2015/05/20 Python
Python简单过滤字母和数字的方法小结
2019/01/09 Python
python爬虫 基于requests模块发起ajax的get请求实现解析
2019/08/20 Python
Python hashlib模块实例使用详解
2019/12/24 Python
Pytorch to(device)用法
2020/01/08 Python
python解释器pycharm安装及环境变量配置教程图文详解
2020/02/26 Python
Python 自由定制表格的实现示例
2020/03/20 Python
python脚本第一行如何写
2020/08/30 Python
C++和python实现阿姆斯特朗数字查找实例代码
2020/12/07 Python
CSS实现的一闪而过的图片闪光效果
2014/04/23 HTML / CSS
俄罗斯旅游网站:Tripadvisor俄罗斯
2017/03/21 全球购物
美国鲍勃商店:Bob’s Stores
2018/07/22 全球购物
临床医师专业个人自我评价范文
2013/11/07 职场文书
深入开展党的群众路线教育实践活动方案
2014/02/04 职场文书
奉献爱心演讲稿
2014/09/04 职场文书
团代会开幕词
2015/01/28 职场文书
oracle DGMGRL ORA-16603报错的解决方法(DG Broker)
2021/04/06 Oracle