5分钟理解JavaScript中this用法分享


Posted in Javascript onNovember 09, 2013

前言
关于JavaScript中this的用法网络中已经有较多比较详尽的介绍,可以参考本文的参考学习资料和网络。本文结合网络收集整理,尝试以一种简易的方式阐述JavaScript中this的用法,希望对大家关于JavaScript中this用法的快速理解有所帮助。
正文
1. this用法实例

window.color = “red”; 
var o = { color: “blue” }; 
function sayColor(){ 
    alert(this.color); 
} 
sayColor(); //”red” 
o.sayColor = sayColor; 
o.sayColor(); //”blue”

2. this用法简易理解
this指向哪里:
this运行的环境(the context object),或者简单理解为:this所在函数被调用时的当前作用域。
一段实例代码立刻明白:
var fun = function() { 
    console.log(this); 
} 
fun();// console: window,fun 的执行context为window,即this所在函数(fun())被调用时的当前作用域为window。 
new fun();//console: fun,fun 的执行context为fun对象内,即this所在函数(fun())被调用时的当前作用域为fun对象内。

3. this用法的一个特殊情况
(1)情况:
<input type="button" id="aButton" value="demo" onclick="demo()" /> 
<script type="text/javascript"> 
function demo() { 
    this.value = Math.random(); 
} 
</script>

点击这个button之后,你会发现按钮的value值没有改变。
原因:在本代码运行的情况下this指向的是window对象。
<input type="button" id="aButton" value="demo" /> 
<script type="text/javascript"> 
var button = document.getElementById("aButton"); 
function demo() { 
    this.value = Math.random(); 
} 
button.onclick= demo; 
</script>

点击这个button之后,程序可正常执行。
(2)原因解释:
<input type="button" id="aButton" value="demo" /> 
<script type="text/javascript"> 
var button = document.getElementById("aButton"); 
function demo() { 
    this.value = Math.random(); 
} 
button.onclick= demo; 
alert(button.onclick); 
</script>

得到的输出是:
function demo() { 
    this.value = Math.random(); 
}

<input type="button" id="aButton" value="demo" onclick="demo()" /> 
<script type="text/javascript"> 
var button = document.getElementById("aButton"); 
function demo() { 
    this.value = Math.random(); 
} 
alert(button.onclick); 
</script>

得到的输出是:
function onclick() { 
    demo(); 
}
Javascript 相关文章推荐
javascript实现div的显示和隐藏的小例子
Jun 25 Javascript
Jquery封装tab自动切换效果的具体实现
Jul 13 Javascript
JS版的date函数(和PHP的date函数一样)
May 12 Javascript
零基础搭建Node.js、Express、Ejs、Mongodb服务器及应用开发入门
Dec 20 Javascript
用队列模拟jquery的动画算法实例
Jan 20 Javascript
jquery组件WebUploader文件上传用法详解
Oct 23 Javascript
简单谈谈gulp-changed插件
Feb 21 Javascript
Vue异步组件使用详解
Apr 08 Javascript
vue组件学习教程
Sep 09 Javascript
javascript实现循环广告条效果
Dec 12 Javascript
基于vue.js仿淘宝收货地址并设置默认地址的案例分析
Aug 20 Javascript
javascript实现放大镜功能
Dec 09 Javascript
Mac地址验证的javascript代码
Nov 09 #Javascript
详解jquery uploadify 上传文件
Nov 09 #Javascript
深入理解Javascript中的循环优化
Nov 09 #Javascript
原生JS可拖动弹窗效果实例代码
Nov 09 #Javascript
当鼠标移动时出现特效的JQuery代码
Nov 08 #Javascript
window.onresize 多次触发的解决方法
Nov 08 #Javascript
javascript阻止scroll事件多次执行的思路及实现
Nov 08 #Javascript
You might like
php基于PDO连接MSSQL示例DEMO
2016/07/13 PHP
IE与FireFox的兼容性问题分析
2007/04/22 Javascript
jQuery 性能优化指南 (1)
2009/05/21 Javascript
javascript 解析url的search方法
2010/02/09 Javascript
jquery select动态加载选择(兼容各种浏览器)
2013/02/01 Javascript
jQuery.Highcharts.js绘制柱状图饼状图曲线图
2015/03/14 Javascript
Node.js 异步编程之 Callback介绍(一)
2015/03/30 Javascript
基于javascript制作微信聊天面板
2020/08/09 Javascript
javascript执行环境及作用域详解
2016/05/05 Javascript
基于jQuery的select下拉框选择触发事件实例分析
2016/11/18 Javascript
AngularJS指令与控制器之间的交互功能示例
2016/12/14 Javascript
JQuery 获取Dom元素的实例讲解
2017/07/08 jQuery
jQuery实现的3D版图片轮播示例【滑动轮播】
2019/01/18 jQuery
Vue动态组件与异步组件实例详解
2019/02/23 Javascript
vue图片上传组件使用详解
2019/12/23 Javascript
JavaScript中EventBus实现对象之间通信
2020/10/18 Javascript
浅谈Vue static 静态资源路径 和 style问题
2020/11/07 Javascript
使用python在校内发人人网状态(人人网看状态)
2014/02/19 Python
python在Windows8下获取本机ip地址的方法
2015/03/14 Python
在windows下快速搭建web.py开发框架方法
2016/04/22 Python
python代码 if not x: 和 if x is not None: 和 if not x is None:使用介绍
2016/09/21 Python
Python编程使用NLTK进行自然语言处理详解
2017/11/16 Python
python如何实现一个刷网页小程序
2018/11/27 Python
如何更优雅地写python代码
2019/07/02 Python
python图形开发GUI库wxpython使用方法详解
2020/02/14 Python
CSS的pointer-events属性详细介绍(作用和注意事项)
2014/04/23 HTML / CSS
LODI女鞋在线商店:阿利坎特的鞋类品牌
2019/02/15 全球购物
有趣、实用和鼓舞人心的产品:Inspire Uplift
2019/11/05 全球购物
什么是典型的软件三层结构?软件设计为什么要分层?软件分层有什么好处?
2012/03/14 面试题
一家外企的面试题目(C/C++面试题,C语言面试题)
2014/03/24 面试题
自我鉴定写作要点
2014/01/17 职场文书
婚前财产协议书范本
2014/10/19 职场文书
2015年高中班主任工作总结
2015/04/30 职场文书
公司管理建议书
2015/09/14 职场文书
原生CSS实现文字无限轮播的通用方法
2021/03/30 HTML / CSS
Python使用scapy模块发包收包
2021/05/07 Python