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 相关文章推荐
ExtJS4 组件化编程,动态加载,面向对象,Direct
May 12 Javascript
js 代码优化点滴记录
Feb 19 Javascript
JavaScript lastIndexOf方法入门实例(计算指定字符在字符串中最后一次出现的位置)
Oct 17 Javascript
AngularJs定制样式插入到ueditor中的问题小结
Aug 01 Javascript
JavaScript与ActionScript3两者的同性与差异性
Sep 22 Javascript
jQuery基于Ajax方式提交表单功能示例
Feb 10 Javascript
vue-cli中的babel配置文件.babelrc实例详解
Feb 22 Javascript
vue实现简单的MVVM框架
Aug 05 Javascript
解决jquery有正确返回值但不执行success函数的问题
Aug 20 jQuery
vue父组件触发事件改变子组件的值的方法实例详解
May 07 Javascript
微信小程序云函数添加数据到数据库的方法
Mar 04 Javascript
vue+vant 上传图片需要注意的地方
Jan 03 Vue.js
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
在apache下限制每个虚拟主机的并发数!!!!
2006/10/09 PHP
浅析Yii2集成富文本编辑器redactor实例教程
2016/04/25 PHP
php redis setnx分布式锁简单原理解析
2020/10/23 PHP
JavaScript中的Document文档对象
2008/01/16 Javascript
javascript document.images实例
2008/05/27 Javascript
利用NodeJS的子进程(child_process)调用系统命令的方法分享
2013/06/05 NodeJs
解析javascript 数组以及json元素的添加删除
2013/06/26 Javascript
JS解决ie6下png透明的方法实例
2013/08/02 Javascript
用js代码改变单选框选中状态的简单实例
2013/12/18 Javascript
基于jQuery实现点击最后一行实现行自增效果的表格
2016/01/12 Javascript
Javascript复制实例详解
2016/01/28 Javascript
JavaScript驾驭网页-获取网页元素
2016/03/24 Javascript
asp.net+jquery.form实现图片异步上传的方法(附jquery.form.js下载)
2016/05/05 Javascript
Bootstrap自定义文件上传下载样式
2016/05/26 Javascript
Summernote实现图片上传功能的简单方法
2016/07/11 Javascript
微信小程序之小豆瓣图书实例
2016/11/30 Javascript
Angularjs 依赖压缩及自定义过滤器写法
2017/02/04 Javascript
浅谈关于.vue文件中style的scoped属性
2017/08/19 Javascript
Vue中的验证登录状态的实现方法
2019/03/09 Javascript
jquery 遍历hash操作示例【基于ajax交互】
2019/10/12 jQuery
JS遍历树层级关系实现原理解析
2020/08/31 Javascript
详解python函数传参是传值还是传引用
2018/01/16 Python
Python if语句知识点用法总结
2018/06/10 Python
如何用Python合并lmdb文件
2018/07/02 Python
Pytorch实现GoogLeNet的方法
2019/08/18 Python
适合Python初学者的一些编程技巧
2020/02/12 Python
python topk()函数求最大和最小值实例
2020/04/02 Python
Jupyter notebook如何修改平台字体
2020/05/13 Python
基于Tensorflow读取MNIST数据集时网络超时的解决方式
2020/06/22 Python
全球速卖通巴西站点:Aliexpress巴西
2016/08/24 全球购物
Spotahome意大利:公寓和房间出租
2020/02/21 全球购物
单位介绍信范文
2014/01/18 职场文书
大学学生会竞选演讲稿
2014/04/25 职场文书
2014副局长群众路线对照检查材料思想汇报
2014/09/22 职场文书
2014年关工委工作总结
2014/11/17 职场文书
防溺水主题班会教案
2015/08/12 职场文书