通过一段代码简单说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 相关文章推荐
动态创建的表格单元格中的事件实现代码
Dec 30 Javascript
基于JS代码实现导航条弹出式悬浮菜单
Jun 17 Javascript
微信JS-SDK坐标位置如何转换为百度地图坐标
Jul 04 Javascript
BootStrap 图片样式、辅助类样式和CSS组件的实例详解
Jan 20 Javascript
利用jQuery实现滑动开关按钮效果(附demo源码下载)
Feb 07 Javascript
JavaScript之map reduce_动力节点Java学院整理
Jun 29 Javascript
javascript 玩转Date对象(实例讲解)
Jul 11 Javascript
vue操作动画的记录animate.css实例代码
Apr 26 Javascript
Vuex模块化应用实践示例
Feb 03 Javascript
开发一个封装iframe的vue组件
Mar 29 Vue.js
测量JavaScript函数的性能各种方式对比
Apr 27 Javascript
Javascript的promise,async和await的区别详解
Mar 24 Javascript
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
多数据表共用一个页的新闻发布
2006/10/09 PHP
PHP无限分类的类
2007/01/02 PHP
php表单转换textarea换行符的方法
2010/09/10 PHP
PHP中的cookie不用刷新就生效的方法
2012/02/04 PHP
分享常见的几种页面静态化的方法
2015/01/08 PHP
通过Email发送PHP错误的方法
2015/07/20 PHP
自制PHP框架之模型与数据库
2017/05/07 PHP
PHP基于curl实现模拟微信浏览器打开微信链接的方法示例
2019/02/15 PHP
PHP中PCRE正则解析代码详解
2019/04/26 PHP
Laravel框架实现调用百度翻译API功能示例
2019/05/30 PHP
JavaScript使用cookie
2007/02/02 Javascript
解决表单中第一个非隐藏的元素获得焦点的一个方案
2009/10/26 Javascript
IE6不能修改NAME问题的解决方法
2010/09/03 Javascript
BootstrapTable与KnockoutJS相结合实现增删改查功能【一】
2016/05/10 Javascript
过期软件破解办法实例详解
2017/01/04 Javascript
创建一般js对象的几种方式
2017/01/19 Javascript
jquery插件开发之选项卡制作详解
2017/08/30 jQuery
微信小程序wx.request实现后台数据交互功能分析
2017/11/25 Javascript
vue的安装及element组件的安装方法
2018/03/09 Javascript
VUE+elementui面包屑实现动态路由详解
2019/11/04 Javascript
Vue使用自定义指令实现拖拽行为实例分析
2020/06/06 Javascript
JavaScript indexOf()原理及使用方法详解
2020/07/09 Javascript
python实现的解析crontab配置文件代码
2014/06/30 Python
Python科学画图代码分享
2017/11/29 Python
Python从list类型、range()序列简单认识类(class)【可迭代】
2019/05/31 Python
python按比例随机切分数据的实现
2019/07/11 Python
python3 requests库实现多图片爬取教程
2019/12/18 Python
使用css如何制作时间ICON方法实践
2012/11/12 HTML / CSS
英国最好的包装供应商:Priory Direct
2019/12/17 全球购物
酒店司机岗位职责
2013/12/14 职场文书
互联网创业计划书的书写步骤
2014/01/28 职场文书
四个太阳教学反思
2014/02/01 职场文书
幼儿园教师自我鉴定
2014/03/20 职场文书
员工试用期考核自我鉴定
2014/04/13 职场文书
人事代理委托书
2014/09/27 职场文书
zabbix 代理服务器的部署与 zabbix-snmp 监控问题
2022/07/15 Servers