通过一段代码简单说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 相关文章推荐
基于jQuery的可以控制左右滚动及自动滚动效果的代码
Jul 25 Javascript
10个基于Jquery的幻灯片插件教程
Oct 29 Javascript
JQuery中getJSON的使用方法
Dec 13 Javascript
js自定义事件及事件交互原理概述(二)
Feb 01 Javascript
jQuery之Deferred对象详解
Sep 04 Javascript
完美兼容各大浏览器的jQuery仿新浪图文淡入淡出间歇滚动特效
Nov 12 Javascript
javascript类型系统 Array对象学习笔记
Jan 09 Javascript
JS实现动态表格的添加,修改,删除功能(推荐)
Jun 15 Javascript
详解JS构造函数中this和return
Sep 16 Javascript
微信小程序实现订单倒计时
Nov 01 Javascript
vue进入页面时不在顶部,检测滚动返回顶部按钮问题及解决方法
Oct 30 Javascript
vue-quill-editor的使用及个性化定制操作
Aug 04 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
php中$_SERVER[PHP_SELF] 和 $_SERVER[SCRIPT_NAME]之间的区别
2009/09/05 PHP
深入理解PHP原理之Session Gc的一个小概率Notice
2011/04/12 PHP
PHP查询网站的PR值
2013/10/30 PHP
php不允许用户提交空表单(php空值判断)
2013/11/12 PHP
symfony表单与页面实现技巧
2015/01/26 PHP
PHP使用CURL实现多线程抓取网页
2015/04/30 PHP
php猜单词游戏
2015/09/29 PHP
Yii2 RESTful中api的使用及开发实例详解
2016/07/06 PHP
js+FSO遍历文件夹下文件并显示
2007/03/07 Javascript
JavaScript定义类或函数的几种方式小结
2011/01/09 Javascript
ECMAScript6新增值比较函数Object.is
2015/06/12 Javascript
jQuery formValidator表单验证
2016/01/07 Javascript
Hammer.js+轮播原理实现简洁的滑屏功能
2016/02/02 Javascript
浅谈$('div a') 与$('div>a')的区别
2016/07/18 Javascript
Angularjs的Controller间通信机制实例分析
2016/11/07 Javascript
微信小程序实现倒计时60s获取验证码
2020/04/17 Javascript
js禁止表单重复提交
2017/08/29 Javascript
JS实现快速比较两个字符串中包含有相同数字的方法
2017/09/11 Javascript
解决Idea、WebStorm下使用Vue cli脚手架项目无法使用Webpack别名的问题
2019/10/11 Javascript
JS代码触发事件代码实例
2020/01/02 Javascript
详解微信小程序工程化探索之webpack实战
2020/04/20 Javascript
vue 判断页面是首次进入还是再次刷新的实例
2020/11/05 Javascript
[00:38]TI珍贵瞬间系列(二):笑
2020/08/26 DOTA
python中split方法用法分析
2015/04/17 Python
通过Python爬虫代理IP快速增加博客阅读量
2016/12/14 Python
Python实现堡垒机模式下远程命令执行操作示例
2019/05/09 Python
Python使用APScheduler实现定时任务过程解析
2019/09/11 Python
Python的互斥锁与信号量详解
2019/09/12 Python
keras 指定程序在某块卡上训练实例
2020/06/22 Python
文化与传播毕业生求职信
2014/03/09 职场文书
毕业自我鉴定怎么写
2014/03/25 职场文书
交通事故赔偿协议书
2014/04/15 职场文书
学校就业推荐信范文
2014/05/19 职场文书
2015年网管个人工作总结
2015/05/22 职场文书
教师节主题班会教案
2015/08/17 职场文书
安全生产标语口号
2015/12/26 职场文书