javascript中this的用法实践分析


Posted in Javascript onJuly 29, 2019

本文实例讲述了javascript中this的用法。分享给大家供大家参考,具体如下:

实践一:this在点击等事件中的指向

html结构:

<button id='btn'>click me</button>

javascript结构:

var btn = document.getElementById('btn');
btn.onclick = function(event) {
 console.log(this.innerHTML); // click me
 // 还有另一种做法如下,用事件对象
 var evt = event || window.event;
 var target = evt.target || evt.srcElement;
 console.log(target.innerHTML); // click me
}

实践二:this在对象字面量json中的指向,指向自身对象

var p = {
 "name":"Tom",
 "say":function(){
  console.log(this.name + ' say something!');
 }
}
p.say(); // Tom say something!

实践三:this在全局作用域中的使用

var a = 1;
console.log(this); // window
console.log(this.a); // 1
function test(){
 console.log(this); // window
 this.haha = 'i am haha';
};
test(); // 函数一执行,haha 作用域变成全局的
console.log(haha); // i am haha

实践四:this在定时器中的指向,定时器是window对象的一个方法,定时器中的this指向window对象,setTimeout()setInterval() 是一样的

var div = document.getElementById('div');
div.onclick = function() {
 var that = this; // 用that 来存储当前的div这个dom元素
 setTimeout(function(){
  console.log(this + ' i am this'); // [object Window] i am this
  console.log(that + ' i am that'); // [object HTMLDivElement] i am that
 }, 100);
}

实践五:this在对象中的指向,指向当前实例对象

function Person(){
 this.name = 'jack';
};
Person.prototype = {
 buy:function() {
  console.log(this.name + ' go buy!');
 }
}
var p = new Person();
console.log(p.name); // jack;
p.buy(); // jack go buy!

实践六:this在闭包中的应用1

var age = 20;
var person = {


"age" : 10,


"getAgeFunc" : function(){



return function(){




return this.age; // this 指向 window



};


}

};
console.log(person.getAgeFunc()()); // 20
/* 
  分析这段代码:person调用getAgeFunc() 在内存中返回一个函数,这个函数是全局的,然后加个() 执行。那么,返回20
*/

实践七:this在闭包中的应用2

var age = 20;
var person = {
"age" : 10,

"getAgeFunc" : function(){
    var that = this;


return function(){



return that.age; // that 指向 person


};

}
};
console.log(person.getAgeFunc()()); // 10
/*
  分析这段代码:person调用getAgeFunc() 用that代替当前对象,当执行返回的闭包函数时,age是person对象的一个属性那么,返回10
*/

实践八:用call和apply改变this的指向 ,以后会详细分析 call和apply以及闭包的概念

var person = {
 "name":"Tom",
 "say":function(x,y) {
   console.log(this.name + ' say ' + x + ' ' + y);
 }
}
var student = {
 "name":"Lucy"
}
person.say.call(student,'hello','world'); // Lucy say hello world
person.say.apply(student,['hello','javascript']); // Lucy say hello javascript

感兴趣的朋友可以使用在线HTML/CSS/JavaScript代码运行工具:http://tools.3water.com/code/HtmlJsRun测试上述代码运行效果。

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
取得传值的函数
Oct 27 Javascript
js模拟类继承小例子
Jul 17 Javascript
一个简单的js动画效果代码
Jul 20 Javascript
Jquery带搜索框的下拉菜单
May 06 Javascript
分享我对JS插件开发的一些感想和心得
Feb 04 Javascript
jQuery实现的倒计时效果实例小结
Apr 16 Javascript
js 函数式编程学习笔记
Mar 25 Javascript
jQuery 开发之EasyUI 添加数据的实例
Sep 26 jQuery
Vue2.0子同级组件之间数据交互方法
Feb 28 Javascript
vue基于better-scroll实现左右联动滑动页面
Jun 30 Javascript
如何在node环境实现“get数据解析”代码实例
Jul 03 Javascript
正则表达式基础与常用验证表达式
Jun 16 Javascript
学习LayUI时自研的表单参数校验框架案例分析
Jul 29 #Javascript
jquery.pager.js分页实现详解
Jul 29 #jQuery
javascript面向对象创建对象的方式小结
Jul 29 #Javascript
jquery.pager.js实现分页效果
Jul 29 #jQuery
vue-router跳转时打开新页面的两种方法
Jul 29 #Javascript
JS实现移动端点击按钮复制文本内容
Jul 28 #Javascript
微信小程序文字显示换行问题
Jul 28 #Javascript
You might like
PHP性能优化工具篇Benchmark类调试执行时间
2011/12/06 PHP
解析php利用正则表达式解决采集内容排版的问题
2013/06/20 PHP
php5.3提示Function ereg() is deprecated Error问题解决方法
2014/11/12 PHP
PHP+redis实现的悲观锁机制示例
2018/06/12 PHP
IE下双击checkbox反应延迟问题的解决方法
2014/03/27 Javascript
Mac OS X 系统下安装和部署Egret引擎开发环境
2014/09/03 Javascript
angular.bind使用心得
2015/10/26 Javascript
select自定义小三角样式代码(实用总结)
2017/08/18 Javascript
基于jquery实现五星好评
2017/11/18 jQuery
nodeJS模块简单用法示例
2018/04/21 NodeJs
JS实现可视化文件上传
2018/09/08 Javascript
vue中如何去掉空格的方法实现
2018/11/09 Javascript
JSON.stringify()方法讲解
2019/01/31 Javascript
小程序自定义圆形进度条
2020/11/17 Javascript
[51:20]完美世界DOTA2联赛PWL S2 Magma vs PXG 第一场 11.28
2020/12/01 DOTA
用python 制作图片转pdf工具
2015/01/30 Python
基于python内置函数与匿名函数详解
2018/01/09 Python
Python模拟随机游走图形效果示例
2018/02/06 Python
PYQT5实现控制台显示功能的方法
2019/06/25 Python
Python文件操作函数用法实例详解
2019/12/24 Python
解决keras backend 越跑越慢问题
2020/06/18 Python
python创建文本文件的简单方法
2020/08/30 Python
HTML5拖拽功能实现的拼图游戏
2018/07/31 HTML / CSS
18-35岁旅游团的全球领导者:Contiki
2017/02/08 全球购物
什么是唯一索引
2015/07/05 面试题
控制工程专业个人求职信
2013/09/25 职场文书
机械电子工程专业推荐信范文
2013/11/20 职场文书
大学生党课思想汇报
2013/12/29 职场文书
应届毕业生求职自荐书
2014/01/03 职场文书
上课说话检讨书大全
2014/01/22 职场文书
校运会入场式解说词
2014/02/10 职场文书
人民教师的自我评价分享
2014/02/21 职场文书
有多年工作经验的自我评价
2014/03/02 职场文书
倡议书的格式写法
2015/04/28 职场文书
2015年中学总务处工作总结
2015/07/22 职场文书
springboot拦截器无法注入redisTemplate的解决方法
2021/06/27 Java/Android