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 相关文章推荐
IE和Firefox下javascript的兼容写法小结
Dec 10 Javascript
javascript 表单的友好用户体现
Jan 07 Javascript
js获取IP和PcName(IE)在vs中可用
Aug 02 Javascript
JQuery select(下拉框)操作方法汇总
Apr 15 Javascript
使用AngularJS中的SCE来防止XSS攻击的方法
Jun 18 Javascript
使用Raygun来自动追踪AngularJS中的异常
Jun 23 Javascript
js实现文本框支持加减运算的方法
Aug 19 Javascript
JavaScript仿淘宝页面图片滚动加载及刷新回顶部的方法解析
May 24 Javascript
javascript防篡改对象实例详解
Apr 10 Javascript
vue-cli脚手架搭建的项目去除eslint验证的方法
Sep 29 Javascript
ES6 Generator基本使用方法示例
Jun 06 Javascript
你不知道的 TypeScript 高级类型(小结)
Aug 28 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
WordPress中Gravatar头像缓存到本地及相关优化的技巧
2015/12/19 PHP
php 5.4 全新的代码复用Trait详解
2017/01/05 PHP
基于 Swoole 的微信扫码登录功能实现代码
2018/01/15 PHP
js跨域问题之跨域iframe自适应大小实现代码
2010/07/17 Javascript
JS模板实现方法
2013/04/03 Javascript
javascript制作坦克大战全纪录(1)
2014/11/27 Javascript
简化版手机端照片预览组件
2015/04/13 Javascript
JavaScript触发onScroll事件的函数节流详解
2016/12/14 Javascript
Ajax 加载数据 练习代码
2017/01/05 Javascript
全面总结Javascript对数组对象的各种操作
2017/01/22 Javascript
javascript中神奇的 Date对象小结
2017/10/12 Javascript
浅析node Async异步处理模块用例分析及常用方法介绍
2017/11/17 Javascript
浅谈JsonObject中的key-value数据解析排序问题
2017/12/06 Javascript
关于Vue的路由权限管理的示例代码
2018/03/06 Javascript
解决vue2.0动态绑定图片src属性值初始化时报错的问题
2018/03/14 Javascript
详解mpvue scroll-view自动回弹bug解决方案
2018/10/01 Javascript
jquery.pagination.js分页使用教程
2018/10/23 jQuery
vue如何自动化打包测试环境和正式环境的dist/test文件
2019/06/06 Javascript
解决 window.onload 被覆盖的问题方法
2020/01/14 Javascript
node.js中 mysql 增删改查操作及async,await处理实例分析
2020/02/11 Javascript
解决echarts echarts数据动态更新和dataZoom被重置问题
2020/07/20 Javascript
vue+iview实现分页及查询功能
2020/11/17 Vue.js
[01:04:32]DOTA2-DPC中国联赛 正赛 Aster vs LBZS BO3 第二场 2月23日
2021/03/11 DOTA
Python实现确认字符串是否包含指定字符串的实例
2018/05/02 Python
pycharm 批量修改变量名称的方法
2019/08/01 Python
Python处理session的方法整理
2019/08/29 Python
django 取消csrf限制的实例
2020/03/13 Python
python实现UDP协议下的文件传输
2020/03/20 Python
Viking Direct荷兰:购买办公用品
2019/06/20 全球购物
北京天润融通.net面试题笔试题
2012/02/20 面试题
致1500米运动员广播稿
2014/02/07 职场文书
幼儿园健康教育方案
2014/06/14 职场文书
《周恩来的四个昼夜》观后思想汇报范文两篇
2014/09/10 职场文书
学习委员竞选稿
2015/11/20 职场文书
Spring Security中用JWT退出登录时遇到的坑
2021/10/16 Java/Android
PostgreSQL之连接失败的问题及解决
2023/05/08 PostgreSQL