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 相关文章推荐
jQuery Ajax 实例全解析
Apr 20 Javascript
JQuery获取各种宽度、高度(format函数)实例
Mar 04 Javascript
Javascript高级技巧分享
Feb 25 Javascript
Jquery中Event对象属性小结
Feb 27 Javascript
jquery插件NProgress.js制作网页加载进度条
Jun 05 Javascript
基于javascript html5实现3D翻书特效
Mar 14 Javascript
JavaScript实战之菜单特效
Aug 16 Javascript
微信小程序 wx.login解密出现乱码的问题解决办法
Mar 10 Javascript
如何使用vuex实现兄弟组件通信
Nov 02 Javascript
Vue实现多标签选择器
Nov 28 Javascript
微信小程序利用云函数获取手机号码
Dec 17 Javascript
《javascript设计模式》学习笔记五:Javascript面向对象程序设计工厂模式实例分析
Apr 08 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 join函数应用
2011/05/04 PHP
浅谈PHP定义命令空间的几个注意点(推荐)
2016/10/29 PHP
基于jquery完美拖拽,可返回拖动轨迹
2012/03/29 Javascript
jquery乱码与contentType属性设置问题解决方案
2013/01/07 Javascript
使用jQuery UI的tooltip函数修饰title属性的气泡悬浮框
2013/06/24 Javascript
JavaScript中的eval()函数使用介绍
2014/12/31 Javascript
学习JavaScript设计模式之享元模式
2016/01/18 Javascript
jQuery实现调整表格单列顺序完整实例
2016/06/20 Javascript
js时间比较 js计算时间差的简单实现方法
2016/08/26 Javascript
JavaScript触发onScroll事件的函数节流详解
2016/12/14 Javascript
jQuery中DOM节点的删除方法总结(超全面)
2017/01/22 Javascript
详解VUE前端按钮权限控制
2019/04/26 Javascript
React 实现车牌键盘的示例代码
2019/12/20 Javascript
pycharm 使用心得(三)Hello world!
2014/06/05 Python
Python编程中归并排序算法的实现步骤详解
2016/05/04 Python
Python实现的基数排序算法原理与用法实例分析
2017/11/23 Python
在python中按照特定顺序访问字典的方法详解
2018/12/14 Python
python使用 zip 同时迭代多个序列示例
2019/07/06 Python
python全局变量引用与修改过程解析
2020/01/07 Python
在python下实现word2vec词向量训练与加载实例
2020/06/09 Python
python lambda的使用详解
2021/02/26 Python
CSS3 :default伪类选择器使用简介
2018/03/15 HTML / CSS
社区十八大感言
2014/01/19 职场文书
家长评语和期望
2014/02/10 职场文书
创新比赛获奖感言
2014/02/13 职场文书
阳光体育活动方案
2014/02/16 职场文书
高校教师自荐信范文
2014/03/13 职场文书
党校学习心得体会范文
2014/09/09 职场文书
2014教师个人自我评价范文
2014/09/13 职场文书
优秀教师推荐材料
2014/12/16 职场文书
2015年营业员工作总结
2015/04/23 职场文书
2019大学生实习报告
2019/06/21 职场文书
解决Jenkins集成SonarQube遇到的报错问题
2021/07/15 Java/Android
Java基于Dijkstra算法实现校园导游程序
2022/03/17 Java/Android
Python各协议下socket黏包问题原理
2022/04/12 Python
JS setTimeout与setInterval的区别
2022/04/20 Javascript