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操作对象数组的实现代码
Apr 27 Javascript
一个简单的jquery的多选下拉框(自写)
May 05 Javascript
Javascript中For In语句用法实例
May 14 Javascript
AngularJS基础 ng-non-bindable 指令详细介绍
Aug 02 Javascript
通过Ajax使用FormData对象无刷新上传文件方法
Dec 08 Javascript
简单易懂的天气插件(代码分享)
Feb 04 Javascript
jQuery日程管理控件glDatePicker用法详解
Mar 29 jQuery
d3.js入门教程之数据绑定详解
Apr 28 Javascript
jQuery实现的页面弹幕效果【测试可用】
Aug 17 jQuery
微信小程序入口场景的问题集合与相关解决方法
Jun 26 Javascript
微信小程序自定义弹窗实现详解(可通用)
Jul 04 Javascript
ES6中Promise的使用方法实例总结
Feb 18 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中的登陆login
2007/01/18 PHP
PHP 网页过期时间的控制代码
2009/06/29 PHP
CodeIgniter连贯操作的底层原理分析
2016/05/17 PHP
CentOS7系统搭建LAMP及更新PHP版本操作详解
2020/03/26 PHP
永不消失的title提示代码
2007/02/15 Javascript
JavaScript中通过闭包解决只能取得包含函数中任何变量最后一个值的问题
2010/08/12 Javascript
extjs实现选择多表自定义查询功能 前台部分(ext源码)
2011/12/20 Javascript
node.js中的fs.chown方法使用说明
2014/12/16 Javascript
jQuery回调函数的定义及用法实例
2014/12/23 Javascript
JS实现可关闭的对联广告效果代码
2015/09/14 Javascript
vue2.0之多页面的开发的示例
2018/01/30 Javascript
Vue三层嵌套路由的示例代码
2018/05/05 Javascript
JavaScript对象拷贝与Object.assign用法实例分析
2018/06/20 Javascript
NodeJs 模仿SIP话机注册的方法
2019/06/21 NodeJs
async/await让异步操作同步执行的方法详解
2019/11/01 Javascript
vue.js的简单自动求和计算实例
2019/11/08 Javascript
Python 流程控制实例代码
2009/09/25 Python
django启动uwsgi报错的解决方法
2018/04/08 Python
python+pandas生成指定日期和重采样的方法
2018/04/11 Python
查看python下OpenCV版本的方法
2018/08/03 Python
Python中的异常处理try/except/finally/raise用法分析
2019/02/28 Python
wxpython+pymysql实现用户登陆功能
2019/11/19 Python
django跳转页面传参的实现
2020/09/17 Python
python判断all函数输出结果是否为true的方法
2020/12/03 Python
HTML5和CSS3实例教程总结(推荐)
2016/07/18 HTML / CSS
弘扬雷锋精神活动演讲稿
2014/03/04 职场文书
公关活动策划方案
2014/05/25 职场文书
体育比赛口号
2014/06/09 职场文书
高效课堂标语
2014/06/26 职场文书
上班离岗检讨书
2014/09/10 职场文书
咖啡厅商业计划书
2014/09/15 职场文书
乡镇干部先进性教育活动个人整改措施
2014/09/16 职场文书
2016新春团拜会致辞
2015/08/01 职场文书
2016国培学习心得体会
2016/01/08 职场文书
Python数据类型最全知识总结
2021/05/31 Python
win10电脑老是死机怎么办?win10系统老是死机的解决方法
2022/08/05 数码科技