JavaScript中this的用法实例分析


Posted in Javascript onDecember 19, 2016

本文实例分析了JavaScript中this的用法。分享给大家供大家参考,具体如下:

一."this"公理

this关键字永远都指向函数(方法)的所有者;

function fn1(){
  this
};
fn1(); //this=>window
oDiv.onclick=fn1; //this=>oDiv
oDiv.onclick=function(){
  this //this=>oDiv
  fn1(); //this=>window
}
<div onclick="this.fn1();"></div> //这种行间脚本的写法现在非常罕见

这里的this指向div,fn1()里的this指向window

var it=
{
  info:["腾讯","搜狐","新浪","百度"],
  getinfo:function()
  {
    alert(this.info.join(","));
  }
};
it.getinfo();

输出:腾讯,搜狐,新浪,百度

二.函数赋值给变量时的"this"问题

var it=
{
  info:["腾讯","搜狐","新浪","百度"],
  getinfo:function()
  {
    alert(this.info.join(","));
  }
};
var data=it.getinfo;
data();

输出:报错,TypeError: this.info is undefined

代码相当于

var data=function(){
  alert(this.info.join(","));
};
data();

这里的this指向window,这里的data是被赋值,如果是var data=it.getinfo();那就是调用,结果还是腾讯,搜狐,新浪,百度。如果alert(this.it.info.join(","));结果还是腾讯,搜狐,新浪,百度。

var info=["QQ","sohu","sina","baidu"]
var it=
{
  info:["腾讯","搜狐","新浪","百度"],
  getinfo:function()
  {
    alert(this.info.join(","));
  }
};
var data=it.getinfo;
data();

输出:QQ,sohu,sina,baidu

三.作为对象方法调用时的"this"问题

function test()
{
  alert(this.x);
}
var o={};
o.x=1;
o.t=test;
o.t();

输出:1

四.作为构造函数调用时的"this"问题

var x=2;
function test()
{
  this.x=1;
}
test();
alert(x);

输出:1

var x=2;
function test()
{
  this.x=1;
}
var o=new test();
alert(o.x);
alert(x);

输出:1,2

五.闭包中的"this"指向问题

var it=
{
  info:["腾讯","搜狐","新浪","百度"],
  getinfo:function()
  {
  function abc(){
    alert(this.info.join(","));
  }
  abc();
  }
};
it.getinfo();

输出:报错,TypeError: this.info is undefined

闭包中的this不能指向it

解决方法

var it=
{
  info:["腾讯","搜狐","新浪","百度"],
  getinfo:function()
  {
  var _this=this;
  function abc(){
      alert(_this.info.join(","));
  }
  abc();
  }
};
it.getinfo();

优点:无论外部函数名字(it)怎么变,都能指向info

更多关于JavaScript相关内容可查看本站专题:《javascript面向对象入门教程》、《JavaScript中json操作技巧总结》、《JavaScript切换特效与技巧总结》、《JavaScript查找算法技巧总结》、《JavaScript错误与调试技巧总结》、《JavaScript数据结构与算法技巧总结》、《JavaScript遍历算法与技巧总结》及《JavaScript数学运算用法总结》

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
html读出文本文件内容
Jan 22 Javascript
jQuery get和post 方法传值注意事项
Nov 03 Javascript
javascript string字符串优化问题
Jul 31 Javascript
六款帮助你实现惊艳视差滚动效果的jQuery插件
Sep 14 Javascript
js 如何实现对数据库的增删改查
Nov 23 Javascript
jQuery实现公告文字左右滚动的实例代码
Oct 29 Javascript
纯js实现div内图片自适应大小(已测试,兼容火狐)
Jun 16 Javascript
js实现的点击div区域外隐藏div区域
Jun 30 Javascript
jquery实现加载进度条提示效果
Nov 23 Javascript
jquery+ajax实现省市区三级联动效果简单示例
Jan 04 Javascript
vue-cli 3.x 配置Axios(proxyTable)跨域代理方法
Sep 19 Javascript
webpack 从指定入口文件中提取公共文件的方法
Nov 13 Javascript
JS填写银行卡号每隔4位数字加一个空格
Dec 19 #Javascript
JavaScript中校验银行卡号的实现代码
Dec 19 #Javascript
快速入门Vue
Dec 19 #Javascript
javascript中call,apply,bind函数用法示例
Dec 19 #Javascript
谈谈jQuery之Deferred源码剖析
Dec 19 #Javascript
15个非常实用的JavaScript代码片段
Dec 18 #Javascript
scroll事件实现监控滚动条并分页显示(zepto.js)
Dec 18 #Javascript
You might like
在线竞拍系统的PHP实现框架(二)
2006/10/09 PHP
保存到桌面、设为桌面且带图标的PHP代码
2013/11/19 PHP
浅谈php错误提示及查错方法
2015/07/14 PHP
PHP实现简单实用的验证码类
2015/07/29 PHP
PHP会话操作之cookie用法分析
2016/09/28 PHP
Ucren Virtual Desktop V2.0
2006/11/07 Javascript
jquery判断浏览器类型的代码
2012/11/05 Javascript
jQuery级联操作绑定事件实例
2014/09/02 Javascript
javascript单页面手势滑屏切换原理详解
2016/03/21 Javascript
浅谈Jquery中Ajax异步请求中的async参数的作用
2016/06/06 Javascript
JavaScript实现相册弹窗功能(zepto.js)
2016/06/21 Javascript
jQuery轮播图效果精简版完整示例
2016/09/04 Javascript
简单实现js轮播图效果
2017/07/14 Javascript
jquery鼠标悬停导航下划线滑出效果
2017/09/29 jQuery
jQuery时间戳和日期相互转换操作示例
2018/12/07 jQuery
原生JS实现记忆翻牌游戏
2020/07/31 Javascript
详解vue 组件的实现原理
2020/11/12 Javascript
pycharm 使用心得(八)如何调用另一文件中的函数
2014/06/06 Python
python简单实现操作Mysql数据库
2018/01/29 Python
PyQt5实现下载进度条效果
2018/04/19 Python
python通过zabbix api获取主机
2018/09/17 Python
Python tkinter的grid布局及Text动态显示方法
2018/10/11 Python
Python图像处理库PIL的ImageDraw模块介绍详解
2020/02/26 Python
pymysql 插入数据 转义处理方式
2020/03/02 Python
安装Anaconda3及使用Jupyter的方法
2020/10/27 Python
python3 kubernetes api的使用示例
2021/01/12 Python
CSS+jQuery+PHP+MySQL实现的在线答题功能
2015/04/25 HTML / CSS
英国音乐设备和乐器商店:Gear4music
2017/10/16 全球购物
俄罗斯卫浴采暖及维修用品超级市场:Dkrussia
2020/05/12 全球购物
Vector, ArrayList, HashTable, HashMap哪些是线程安全的,哪些不是
2015/10/12 面试题
Servlet都有哪些方法?主要作用是什么?
2014/03/04 面试题
家长给孩子的评语
2014/01/30 职场文书
小学生安全教育主题班会
2015/08/12 职场文书
乡镇司法所2015年度工作总结
2015/10/14 职场文书
导游词之介休绵山
2019/12/31 职场文书
 python中的元类metaclass详情
2022/05/30 Python