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 相关文章推荐
在标题栏显示新消息提示,很多公司项目中用到这个方法
Nov 04 Javascript
JS无法捕获滚动条上的mouse up事件的原因猜想
Mar 21 Javascript
Javascript 闭包引起的IE内存泄露分析
May 23 Javascript
你必须知道的Javascript知识点之&quot;深入理解作用域链&quot;的介绍
Apr 23 Javascript
详解javascript实现自定义事件
Jan 19 Javascript
一次$.getJSON不执行的简单记录
Jul 19 Javascript
JavaScript中校验银行卡号的实现代码
Dec 19 Javascript
关于jQuery.ajax()的jsonp碰上post详解
Jul 02 jQuery
深入探究node之Transform
Jul 20 Javascript
Javascript Dom元素获取和添加详解
Sep 24 Javascript
vue中上传视频或图片或图片和文字一起到后端的解决方法
Dec 01 Javascript
Node Mongoose用法详解【Mongoose使用、Schema、对象、model文档等】
May 13 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经典面试题集锦
2015/03/19 PHP
让你的PHP7更快之Hugepage用法分析
2016/05/31 PHP
Yii使用smsto短信接口的函数demo示例
2016/07/13 PHP
laravel框架数据库操作、查询构建器、Eloquent ORM操作实例分析
2019/12/20 PHP
使用Rancher在K8S上部署高性能PHP应用程序的教程
2020/07/10 PHP
避免回车键导致的页面无意义刷新的解决方法
2011/04/12 Javascript
学习javascript,实现插入排序实现代码
2011/07/31 Javascript
JS方法调用括号的问题探讨
2014/01/24 Javascript
JS 新增Cookie 取cookie值 删除cookie 举例详解
2014/10/10 Javascript
使用json来定义函数,在里面可以定义多个函数的实现方法
2016/10/28 Javascript
Vue自定义指令实现checkbox全选功能的方法
2018/02/28 Javascript
一份超级详细的Vue-cli3.0使用教程【推荐】
2018/11/15 Javascript
vue中过滤器filter的讲解
2019/01/21 Javascript
Vue项目中ESlint规范示例代码
2019/07/04 Javascript
[04:19]DOTA2完美大师赛第四天精彩集锦
2017/11/26 DOTA
[54:10]Spirit vs NB Supermajor小组赛 A组败者组决赛 BO3 第一场 6.2
2018/06/03 DOTA
天翼开放平台免费短信验证码接口使用实例
2013/12/18 Python
Python的Django框架中URLconf相关的一些技巧整理
2015/07/18 Python
Tornado协程在python2.7如何返回值(实现方法)
2017/06/22 Python
python中类和实例如何绑定属性与方法示例详解
2017/08/18 Python
使用 Python 实现微信群友统计器的思路详解
2018/09/26 Python
python logging模块书写日志以及日志分割详解
2019/07/22 Python
python有序查找算法 二分法实例解析
2020/02/18 Python
Python调用OpenCV实现图像平滑代码实例
2020/06/19 Python
python 决策树算法的实现
2020/10/09 Python
2014年圣诞节倒计时网页的制作过程
2014/12/05 HTML / CSS
澳大利亚儿童鞋在线:The Trybe
2019/07/16 全球购物
当文件系统受到破坏时,如何检查和修复系统?
2012/03/09 面试题
心得体会开头
2014/01/01 职场文书
继承权公证书
2014/04/09 职场文书
《乡下孩子》教学反思
2014/04/17 职场文书
“六查”、“三学”、“三干”查摆问题整改措施
2014/09/27 职场文书
青年教师个人总结
2015/02/11 职场文书
投诉信范文
2015/07/02 职场文书
Golang使用Panic与Recover进行错误捕获
2022/03/22 Golang
【DOTA2】当街暴打?PSG LGD vs VG - DPC 2022 WINTER TOUR CN
2022/04/02 DOTA