通过一段代码简单说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获取html参数及向swf传递参数应用介绍
Feb 18 Javascript
JQuery遍历json数组的3种方法
Nov 08 Javascript
不同编码的页面表单数据乱码问题解决方法
Feb 15 Javascript
整理Javascript流程控制语句学习笔记
Nov 29 Javascript
Jquery遍历select option和添加移除option的实现方法
Aug 26 Javascript
在DWR中实现直接获取一个JAVA类的返回值的两种方法
Dec 25 Javascript
微信小程序 Buffer缓冲区的详解
Jul 06 Javascript
详解vue 组件之间使用eventbus传值
Oct 25 Javascript
JS 实现微信扫一扫功能
Sep 14 Javascript
利用原生JS实现data方法示例代码
May 28 Javascript
DatePickerDialog 自定义样式及使用全解
Jul 09 Javascript
微信jssdk踩坑之签名错误invalid signature
May 19 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
基于flush()不能按顺序输出时的解决办法
2013/06/29 PHP
php使用Jpgraph创建柱状图展示年度收支表效果示例
2017/02/15 PHP
基于jquery的bankInput银行卡账号格式化
2012/08/22 Javascript
javascript动态向网页中添加表格实现代码
2014/02/19 Javascript
JavaScript中合并数组的N种方法
2014/09/16 Javascript
node.js中的fs.rename方法使用说明
2014/12/16 Javascript
jQuery多媒体插件jQuery Media Plugin使用详解
2014/12/19 Javascript
使用getBoundingClientRect方法实现简洁的sticky组件的方法
2016/03/22 Javascript
使用jQuery中的wrap()函数操作HTML元素的教程
2016/05/24 Javascript
JavaScript Drum Kit 指南(纯 JS 模拟敲鼓效果)
2017/07/23 Javascript
使用Bootstrap和Vue实现用户信息的编辑删除功能
2017/10/25 Javascript
js定时器+简单的动画效果实例
2017/11/10 Javascript
详解vue 数据传递的方法
2018/04/19 Javascript
详解vue中组件参数
2018/07/09 Javascript
详解JavaScript栈内存与堆内存
2019/04/04 Javascript
在Vue环境下利用worker运行interval计时器的步骤
2019/08/01 Javascript
JavaScript this使用方法图解
2020/02/04 Javascript
extjs图表绘制之条形图实现方法分析
2020/03/06 Javascript
原生JavaScript创建不可变对象的方法简单示例
2020/05/07 Javascript
详解Vue.js3.0 组件是如何渲染为DOM的
2020/11/10 Javascript
python模拟登录百度代码分享(获取百度贴吧等级)
2013/12/27 Python
Python实现批量读取图片并存入mongodb数据库的方法示例
2018/04/02 Python
numpy.meshgrid()理解(小结)
2019/08/01 Python
Python用Jira库来操作Jira
2020/12/28 Python
详解appium自动化测试工具(monitor、uiautomatorviewer)
2021/01/27 Python
薇姿法国官网:Vichy法国
2021/01/28 全球购物
介绍一下Linux内核的排队自旋锁
2014/01/04 面试题
我爱我校演讲稿
2014/05/21 职场文书
软弱涣散基层党组织整改方案
2014/10/25 职场文书
大学生村官工作总结2015
2015/04/09 职场文书
比赛主持人开场白
2015/05/29 职场文书
中国古代史学名著《战国策》概述
2019/08/09 职场文书
导游词之湖州-太湖
2019/10/11 职场文书
MySQL下使用Inplace和Online方式创建索引的教程
2021/05/26 MySQL
MySQL中IO问题的深入分析与优化
2022/04/02 MySQL
MySQL数据库查询进阶之多表查询详解
2022/04/08 MySQL