通过一段代码简单说js中的this的使用


Posted in Javascript onJuly 23, 2013

今天有朋友说遇到如下代码,让我帮解释原因

var name = "The Window"; 
var object = { 
name : "My Object", 
getNameFunc : function(){ 
return function(){ 
return this.name; 
}; 
} 
};

alert(object.getNameFunc()());原因是js的this是动态决定的,和你调用方式有直接关系。

简单说如果你调用一个函数的时候使用“对象.函数名”的方式,那么this就是这个.(点)之前的对象,否则是window。
比如你在调用object.getNameFunc()的时候getNameFunc函数体中的this是刚声明的object。如果你写成

var func = object.getNameFunc; 
func();

这时候getNameFunc函数体中的this是window,虽然是同一函数调用方式的不同决定了this的不同。
同样的道理,object.getNameFunc()返回的是一个函数引用,加一个括号就是让函数执行。其实相当于如下代码
var func = object.getNameFunc(); 
alert( func() );

函数前没有“对象.”这种形式,所以执行函数时候this是window,结果就很明显了。

以后我会写一篇关于js this的文章,欢迎大家关注我的CSDN博客tt361。

Javascript 相关文章推荐
用JS剩余字数计算的代码
Jul 03 Javascript
jQuery层次选择器选择元素使用介绍
Apr 18 Javascript
jquery实现文本框数量加减功能的例子分享
May 10 Javascript
AngularJS快速入门
Apr 02 Javascript
微信小程序 参数传递详解
Oct 24 Javascript
JavaScript BASE64算法实现(完美解决中文乱码)
Jan 10 Javascript
详解用vue.js和laravel实现微信支付
Jun 23 Javascript
Node.js笔记之process模块解读
May 31 Javascript
vue 设置路由的登录权限的方法
Jul 03 Javascript
解决vue.js this.$router.push无效的问题
Sep 03 Javascript
详解ES6 系列之异步处理实战
Oct 26 Javascript
jquery实现拖拽添加元素功能
Dec 01 jQuery
JS分页控件 可用于无刷新分页
Jul 23 #Javascript
JavaScript获取onclick、onchange等事件值的代码
Jul 22 #Javascript
offsetHeight在OnLoad中获取为0的现象
Jul 22 #Javascript
用jQuery获取IE9下拉框默认值问题探讨
Jul 22 #Javascript
JS 实现图片直接下载示例代码
Jul 22 #Javascript
js操作iframe兼容各种主流浏览器示例代码
Jul 22 #Javascript
JavaScript的模块化:封装(闭包),继承(原型) 介绍
Jul 22 #Javascript
You might like
PHP中文分词的简单实现代码分享
2011/07/17 PHP
比较简单的百度网盘文件直链PHP代码
2013/03/24 PHP
php中并发读写文件冲突的解决方案
2013/10/25 PHP
浅析get与post的一些特殊情况
2014/07/28 PHP
php从数据库读取数据,并以json格式返回数据的方法
2018/08/21 PHP
PHP中number_format()函数的用法讲解
2019/04/08 PHP
Firefox下提示illegal character并出现乱码的原因
2010/03/25 Javascript
点击隐藏页面左栏或右栏实现js代码
2013/04/01 Javascript
JS动态获取当前时间,并写到特定的区域
2013/05/03 Javascript
js使用for循环及if语句判断多个一样的name
2014/09/09 Javascript
jQuery 如何实现一个滑动按钮开关
2016/12/01 Javascript
JavaScript注入漏洞的原理及防范(详解)
2016/12/04 Javascript
JS简单实现点击按钮或文字显示遮罩层的方法
2017/04/27 Javascript
vue中如何创建多个ueditor实例教程
2017/11/14 Javascript
vue-test-utils初使用详解
2019/05/23 Javascript
elementUi vue el-radio 监听选中变化的实例代码
2019/06/28 Javascript
[00:32]2018DOTA2亚洲邀请赛EG出场
2018/04/03 DOTA
[01:02:34]TFT vs VGJ.T Supermajor 败者组 BO3 第二场 6.5
2018/06/06 DOTA
[01:03:18]DOTA2-DPC中国联赛 正赛 RNG vs Dynasty BO3 第一场 1月29日
2021/03/11 DOTA
解决Python print 输出文本显示 gbk 编码错误问题
2018/07/13 Python
解决pycharm无法识别本地site-packages的问题
2018/10/13 Python
python返回数组的索引实例
2019/11/28 Python
python3 dict ndarray 存成json,并保留原数据精度的实例
2019/12/06 Python
python分别打包出32位和64位应用程序
2020/02/18 Python
Python装饰器的应用场景代码总结
2020/04/10 Python
Python yield生成器和return对比代码实例
2020/04/20 Python
英国和爱尔兰最大的地毯零售商:Kukoon
2018/12/17 全球购物
开办化妆品公司创业计划书
2013/12/26 职场文书
公司培训心得体会
2014/01/03 职场文书
25岁生日感言
2014/01/13 职场文书
大学生自我鉴定范文模板
2014/01/21 职场文书
小学毕业感言150字
2014/02/05 职场文书
教师演讲稿开场白
2014/08/25 职场文书
大学生国庆节65周年演讲稿范文
2014/09/25 职场文书
2014党的群众路线教育实践活动学习心得体会
2014/10/31 职场文书
2015学校师德师风工作总结
2015/04/22 职场文书