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判断录入的日期是否合法
Jan 08 Javascript
javascript禁用键盘功能键让右击及其他键无效
Oct 09 Javascript
多种方法实现JS动态添加事件
Nov 01 Javascript
js星星评分效果
Jul 24 Javascript
jQuery中appendTo()方法用法实例
Jan 08 Javascript
jQuery实现类似老虎机滚动抽奖效果
Aug 06 Javascript
javascript实现对表格元素进行排序操作
Nov 18 Javascript
原生JavaScript实现Tooltip浮动提示框特效
Mar 07 Javascript
整理关于Bootstrap警示框的慕课笔记
Mar 29 Javascript
在JS中如何把毫秒转换成规定的日期时间格式实例
May 11 Javascript
第一次记录Bootstrap table学习笔记(1)
May 18 Javascript
Vue解析剪切板图片并实现发送功能
Feb 04 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使用pdo连接并查询sql数据库的方法
2014/12/24 PHP
基于php数组中的索引数组和关联数组详解
2018/03/12 PHP
WordPress 插件——CoolCode使用方法与下载
2007/07/02 Javascript
JS input 数字验证代码
2009/07/30 Javascript
jquery 表格排序、实时搜索表格内容(附图)
2014/05/19 Javascript
js中取得变量绝对值的方法
2015/01/03 Javascript
javascript十六进制及二进制转化的方法
2015/05/06 Javascript
javascript实现信息增删改查的方法
2015/07/25 Javascript
tuzhu_req.js 实现仿百度图片首页效果
2015/08/11 Javascript
深入学习jQuery Validate表单验证(二)
2016/01/18 Javascript
解决jQuery ajax请求在IE6中莫名中断的问题
2016/06/20 Javascript
JS中input表单隐藏域及其使用方法
2017/02/13 Javascript
Vue自定义图片懒加载指令v-lazyload详解
2020/12/31 Javascript
three.js加载obj模型的实例代码
2017/11/10 Javascript
nodejs实现一个word文档解析器思路详解
2018/08/14 NodeJs
vue2.0 element-ui中el-select选择器无法显示选中的内容(解决方法)
2018/08/24 Javascript
JavaScript 继承 封装 多态实现及原理详解
2019/07/29 Javascript
基于Angular 8和Bootstrap 4实现动态主题切换的示例代码
2020/02/11 Javascript
Vue项目vscode 安装eslint插件的方法(代码自动修复)
2020/04/15 Javascript
[01:09]DOTAPLUS——DOTA2的新时代
2018/04/04 DOTA
Python实现多条件筛选目标数据功能【测试可用】
2018/06/13 Python
Python中创建二维数组
2018/10/17 Python
selenium2.0中常用的python函数汇总
2019/08/05 Python
Django获取应用下的所有models的例子
2019/08/30 Python
使用python绘制温度变化雷达图
2019/10/18 Python
jupyter notebook 多环境conda kernel配置方式
2020/04/10 Python
django queryset相加和筛选教程
2020/05/18 Python
西班牙自行车和跑步商店:Alltricks
2018/07/07 全球购物
北京某公司的.net笔试题
2014/03/20 面试题
运动会入场词50字
2014/02/20 职场文书
学习雷锋寄语大全
2014/04/11 职场文书
宿舍标语大全
2014/06/19 职场文书
乡镇挂职心得体会
2014/09/04 职场文书
发工资啦!教你用Python实现邮箱自动群发工资条
2021/05/10 Python
MySQL 使用索引扫描进行排序
2021/06/20 MySQL
从零开始在Centos7上部署SpringBoot项目
2022/04/07 Servers