通过一段代码简单说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 相关文章推荐
JavaScript截取字符串的Slice、Substring、Substr函数详解和比较
Mar 20 Javascript
JavaScript数组Array对象增加和删除元素方法总结
Jan 20 Javascript
jQuery删除节点用法示例(remove方法)
Sep 08 Javascript
使用JS 插件qrcode.js生成二维码功能
Feb 20 Javascript
JS实现点击链接切换显示隐藏内容的方法
Oct 19 Javascript
Vue+jquery实现表格指定列的文字收缩的示例代码
Jan 09 jQuery
vue-resource请求实现http登录拦截或者路由拦截的方法
Jul 11 Javascript
快速解决bootstrap下拉菜单无法隐藏的问题
Aug 10 Javascript
vue的style绑定background-image的方式和其他变量数据的区别详解
Sep 03 Javascript
VuePress 快速踩坑小结
Feb 14 Javascript
微信小程序静默登录的实现代码
Jan 08 Javascript
JS使用setInterval计时器实现挑战10秒
Nov 08 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
咖啡语言
2021/03/03 咖啡文化
php之readdir函数用法实例
2014/11/13 PHP
php实现插入数组但不影响原有顺序的方法
2015/03/27 PHP
PHP 7安装使用体验之性能大提升,兼容性强,扩展支持不够(升级PHP要谨慎)
2017/07/27 PHP
Jquery+ajax请求data显示在GridView上(asp.net)
2010/08/27 Javascript
Colortip基于jquery的信息提示框插件在IE6下面的显示问题修正方法
2010/12/06 Javascript
jquery 页面滚动到底部自动加载插件集合
2014/01/31 Javascript
Nodejs进程管理模块forever详解
2014/06/01 NodeJs
JavaScript中实现异步编程模式的4种方法
2014/09/24 Javascript
JS判断日期格式是否合法的简单实例
2016/07/11 Javascript
Google 地图叠加层实例讲解
2016/08/06 Javascript
bootstrap的工具提示实例代码
2017/05/17 Javascript
nodejs socket实现的服务端和客户端功能示例
2017/06/02 NodeJs
详解js几个绕不开的事件兼容写法
2017/08/30 Javascript
Layui给数据表格动态添加一行并跳转到添加行所在页的方法
2018/08/20 Javascript
VUE-Table上绑定Input通过render实现双向绑定数据的示例
2018/08/27 Javascript
vue+Element实现搜索关键字高亮功能
2019/05/28 Javascript
给Python中的MySQLdb模块添加超时功能的教程
2015/05/05 Python
Python 实现文件的全备份和差异备份详解
2016/12/27 Python
python 实现上传图片并预览的3种方法(推荐)
2017/07/14 Python
python xlsxwriter创建excel图表的方法
2018/06/11 Python
python linecache 处理固定格式文本数据的方法
2019/01/08 Python
Python写一个基于MD5的文件监听程序
2019/03/11 Python
解决python3.6用cx_Oracle库连接Oracle的问题
2020/12/07 Python
浅谈html5标签css3的常用样式
2016/10/20 HTML / CSS
详解HTML5 window.postMessage与跨域
2017/05/11 HTML / CSS
德国PC硬件网站:CASEKING
2016/10/20 全球购物
娱乐地球:Entertainment Earth
2020/01/08 全球购物
关于VPN
2012/06/10 面试题
护士毕业生自荐信
2014/02/07 职场文书
应届中专生自荐书范文
2014/02/13 职场文书
求职意向书
2014/04/01 职场文书
正风肃纪剖析材料
2014/09/30 职场文书
爱心捐款感谢信
2015/01/20 职场文书
房产电话营销开场白
2015/05/29 职场文书
VW、VH适配移动端的解决方案与常见问题
2023/05/21 HTML / CSS