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 相关文章推荐
seajs1.3.0源码解析之module依赖有序加载
Nov 07 Javascript
javascript jscroll模拟html元素滚动条
Dec 18 Javascript
jquery入门—编写一个导航条(可伸缩)
Jan 07 Javascript
getJSON调用后台json数据时函数被调用两次的原因猜想
Sep 29 Javascript
js判断字符长度及中英文数字等
Mar 19 Javascript
基于javascript实现listbox左右移动
Jan 29 Javascript
基于bootstrap实现bootstrap中文网巨幕效果
May 02 Javascript
Angular.Js中过滤器filter与自定义过滤器filter实例详解
May 08 Javascript
详解react如何在组件中获取路由参数
Jun 15 Javascript
vue2.0 实现导航守卫的具体用法(路由守卫)
May 17 Javascript
VUE动态生成word的实现
Jul 26 Javascript
详解Typescript里的This的使用方法
Jan 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 危险函数全解析
2009/09/09 PHP
php与mysql建立连接并执行SQL语句的代码
2011/07/04 PHP
PHP详解ASCII码对照表与字符转换
2011/12/05 PHP
php获取本地图片文件并生成xml文件输出具体思路
2013/04/27 PHP
PHP7.0安装笔记整理
2015/08/28 PHP
thinkPHP模板算术运算相关函数用法分析
2016/07/12 PHP
PHP abstract 抽象类定义与用法示例
2018/05/29 PHP
Cookie 注入是怎样产生的
2009/04/08 Javascript
原创javascript小游戏实现代码
2010/08/19 Javascript
JavaScript不刷新实现浏览器的前进后退功能
2014/11/05 Javascript
JavaScript实现网页加载进度条代码超简单
2015/09/21 Javascript
jQuery animate和CSS3相结合实现缓动追逐效果附源码下载
2016/04/18 Javascript
基于原生JS实现图片裁剪
2016/08/01 Javascript
mpvue实现小程序签到金币掉落动画(api实现)
2019/10/17 Javascript
JS合并两个数组的3种方法详解
2019/10/24 Javascript
python自动查询12306余票并发送邮箱提醒脚本
2018/05/21 Python
基于Django框架利用Ajax实现点赞功能实例代码
2018/08/19 Python
python挖矿算力测试程序详解
2019/07/03 Python
解决Jupyter Notebook开始菜单栏Anaconda下消失的问题
2020/04/13 Python
Pycharm修改python路径过程图解
2020/05/22 Python
部署Django到阿里云服务器教程示例
2020/06/03 Python
Python 解析xml文件的示例
2020/09/29 Python
你不知道的5个HTML5新功能
2016/06/28 HTML / CSS
HealthElement海外旗舰店:新西兰大卖场
2018/02/23 全球购物
英国领先的电动可调床制造商:Laybrook
2019/12/26 全球购物
媒体宣传策划方案
2014/05/25 职场文书
离退休人员聘用协议书
2014/11/24 职场文书
社区党务工作总结2015
2015/05/19 职场文书
电影地道战观后感
2015/06/04 职场文书
六一儿童节致辞稿(3篇)
2019/07/11 职场文书
申论不会写怎么办?教您掌握这6点思维和原则
2019/07/17 职场文书
JS继承最简单的理解方式
2021/03/31 Javascript
实例讲解Python中sys.argv[]的用法
2021/06/03 Python
Java常用函数式接口总结
2021/06/29 Java/Android
golang fmt格式“占位符”的实例用法详解
2021/07/04 Golang
vue中的可拖拽宽度div的实现示例
2022/04/08 Vue.js