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 相关文章推荐
JS异常处理的一个想法(sofish)
Mar 14 Javascript
js 调用父窗口的具体实现代码
Jul 15 Javascript
js+css实现的圆角边框TAB选项卡滑动门代码分享(2款)
Aug 26 Javascript
jQuery ajax提交Form表单实例(附demo源码)
Apr 06 Javascript
Ionic如何实现下拉刷新与上拉加载功能
Jun 03 Javascript
浅析Bootstrap验证控件的使用
Jun 23 Javascript
javascript实现二叉树遍历的代码
Jun 08 Javascript
Jquery+Ajax+xml实现中国地区选择三级联动菜单效果(推荐)
Jun 09 jQuery
JavaScript基于扩展String实现替换字符串中index处字符的方法
Jun 13 Javascript
基于BootStrap multiselect.js实现的下拉框联动效果
Jul 28 Javascript
OpenLayers3实现图层控件功能
Sep 25 Javascript
JavaScript实现10秒后再次获取验证码
Dec 02 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连接oracle数据库的方法(测试成功)
2016/05/26 PHP
laravel-admin 管理平台获取当前登陆用户信息的例子
2019/10/08 PHP
jQuery 使用手册(七)
2009/09/23 Javascript
ASP中进行HTML数据及JS数据编码函数
2009/11/11 Javascript
DIV外区域Click后关闭DIV的实现代码
2011/12/21 Javascript
让你的博客飘雪花超出屏幕依然看得见
2013/01/04 Javascript
js导出table数据到excel即导出为EXCEL文档的方法
2013/10/10 Javascript
jquery 操作iframe的几种方法总结
2013/12/13 Javascript
AngularJS学习笔记之基本指令(init、repeat)
2015/06/16 Javascript
JS组件Bootstrap ContextMenu右键菜单使用方法
2016/04/17 Javascript
深入探讨Vue.js组件和组件通信
2016/09/12 Javascript
Node.js 使用递归实现遍历文件夹中所有文件
2017/09/18 Javascript
cordova入门基础教程及使用中遇到的一些问题总结
2017/11/14 Javascript
基于vue-resource jsonp跨域问题的解决方法
2018/02/03 Javascript
[00:36]我的中国心——Serenity vs Fnatic
2018/08/21 DOTA
编写Python CGI脚本的教程
2015/06/29 Python
python selenium自动上传有赞单号的操作方法
2018/07/05 Python
Python爬虫之pandas基本安装与使用方法示例
2018/08/08 Python
python实现本地图片转存并重命名的示例代码
2018/10/27 Python
关于Tensorflow分布式并行策略
2020/02/03 Python
python实时监控logstash日志代码
2020/04/27 Python
python实现爱奇艺登陆密码RSA加密的方法示例详解
2020/05/27 Python
Python如何实现的二分查找算法
2020/05/27 Python
什么是python的id函数
2020/06/11 Python
keras输出预测值和真实值方式
2020/06/27 Python
HTML5开发动态音频图的实现
2020/07/02 HTML / CSS
美国购买汽车零件网站:Buy Auto Parts
2018/04/02 全球购物
Airbnb爱彼迎官网:成为爱彼迎房东,赚取收入
2019/03/14 全球购物
意大利巧克力店:Chocolate Shop
2019/07/24 全球购物
Urban Decay官方网站:美国化妆品品牌
2020/06/04 全球购物
英文请假条
2014/04/11 职场文书
2014年最新离婚协议书范本
2014/10/11 职场文书
小学体育跳绳课教学反思
2016/02/16 职场文书
Nginx的反向代理实例详解
2021/03/31 Servers
SQL之各种join小结详细讲解
2021/08/04 MySQL
漫改真人电影「萌系男友是燃燃的橘色」公开先导视觉图
2022/03/21 日漫