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 相关文章推荐
[原创]用javascript实现检测指定目录是否存在的方法
Jan 12 Javascript
Javascript异步编程的4种方法让你写出更出色的程序
Jan 17 Javascript
javascript委托(Delegate)blur和focus用法实例分析
May 26 Javascript
实例详解jQuery Mockjax 插件模拟 Ajax 请求
Jan 12 Javascript
VUE使用vuex解决模块间传值问题的方法
Jun 01 Javascript
js 监控iframe URL的变化实例代码
Jul 12 Javascript
react高阶组件经典应用之权限控制详解
Sep 07 Javascript
Vue Socket.io源码解读
Feb 07 Javascript
vue头部导航动态点击处理方法
Nov 02 Javascript
实例讲解vue源码架构
Jan 24 Javascript
vue动画效果实现方法示例
Mar 18 Javascript
微信小程序中为什么使用var that=this
Aug 27 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 DOMElement 操作xml 文档的实现代码
2013/05/10 PHP
递归删除一个节点以及该节点下的所有节点示例
2014/03/19 PHP
php通过Chianz.com获取IP地址与地区的方法
2015/01/14 PHP
PHP中预定义的6种接口介绍
2015/05/12 PHP
php中define用法实例
2015/07/30 PHP
PHP自定义函数获取URL中一级域名的方法
2016/08/23 PHP
laravel 使用事件系统统计浏览量的实现
2019/10/16 PHP
js类后台管理菜单类-MenuSwitch
2007/09/12 Javascript
jquery异步循环获取功能实现代码
2010/09/19 Javascript
基于jquery的获取浏览器窗口大小的代码
2011/03/28 Javascript
js螺旋动画效果的具体实例
2013/11/15 Javascript
深入理解javascript作用域第二篇之词法作用域和动态作用域
2016/07/24 Javascript
Bootstrap响应式侧边栏改进版
2016/09/17 Javascript
bootstrap datepicker限定可选时间范围实现方法
2016/09/28 Javascript
jquery操作ID带有变量的节点实例
2016/12/07 Javascript
Vue 2.0的数据依赖实现原理代码简析
2017/07/10 Javascript
关于JavaScript中forEach和each用法浅析
2017/07/27 Javascript
一个简易时钟效果js实现代码
2020/03/25 Javascript
vue.js的computed,filter,get,set的用法及区别详解
2018/03/08 Javascript
Vue插件打包与发布的方法示例
2018/08/20 Javascript
图片文字识别(OCR)插件Ocrad.js教程
2018/11/26 Javascript
微信小程序实现点击图片放大预览
2019/10/21 Javascript
小程序识别身份证,银行卡,营业执照,驾照的实现
2019/11/05 Javascript
Vuejs中的watch实例详解(监听者)
2020/01/05 Javascript
python以环状形式组合排列图片并输出的方法
2015/03/17 Python
Python编码类型转换方法详解
2016/07/01 Python
python条件变量之生产者与消费者操作实例分析
2017/03/22 Python
pandas中Timestamp类用法详解
2017/12/11 Python
python如何压缩新文件到已有ZIP文件
2018/03/14 Python
Python3最长回文子串算法示例
2019/03/04 Python
Java如何调用外部Exe程序
2015/07/04 面试题
初中音乐教学反思
2014/01/12 职场文书
城市轨道交通工程职业规划书范文
2014/01/18 职场文书
高考励志标语
2014/06/05 职场文书
改革共识倡议书
2014/08/29 职场文书
从事会计工作年限证明
2015/06/23 职场文书