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 相关文章推荐
JavaScript入门教程(3) js面向对象
Jan 31 Javascript
JavaScript中获取元素索引的函数
Sep 10 Javascript
jQuery实现自定义下拉列表
Jan 05 Javascript
jQuery在页面加载时动态修改图片尺寸的方法
Mar 20 Javascript
jQuery获取标签文本内容和html内容的方法
Mar 27 Javascript
ECMA5数组的新增方法有哪些及forEach()模仿实现
Nov 03 Javascript
jQuery实现日期联动效果实例
Jul 26 Javascript
jQuery zTree树插件的使用教程
Aug 16 jQuery
element ui分页多选,翻页记忆的实例
Sep 03 Javascript
js全屏事件fullscreenchange 实现全屏、退出全屏操作
Sep 17 Javascript
JS中类的静态方法,静态变量,实例方法,实例变量区别与用法实例分析
Mar 14 Javascript
vue跳转页面的几种方法(推荐)
Mar 26 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
jQuery中的RadioButton,input,CheckBox取值赋值实现代码
2014/02/18 PHP
ThinkPHP模板中数组循环实例
2014/10/30 PHP
浅析PHP中json_encode与json_decode的区别
2020/07/15 PHP
jQuery EasyUI API 中文文档 - Parser 解析器
2011/09/29 Javascript
Jquery实现自定义tooltip示例代码
2014/02/12 Javascript
JavaScript使用RegExp进行正则匹配的方法
2015/07/11 Javascript
jquery代码实现多选、不同分享功能
2015/07/31 Javascript
纯JS实现图片验证码功能并兼容IE6-8(推荐)
2017/04/19 Javascript
Bootstrap提示框效果的实例代码
2017/07/12 Javascript
JavaScript实现的搜索及高亮显示功能示例
2017/08/14 Javascript
实例详解ztree在vue项目中使用并且带有搜索功能
2018/08/24 Javascript
vee-validate vue 2.0自定义表单验证的实例
2018/08/28 Javascript
Vue实现固定定位图标滑动隐藏效果
2019/05/30 Javascript
亲自动手实现vue日历控件
2019/06/26 Javascript
Vue.js项目实战之多语种网站的功能实现(租车)
2019/08/07 Javascript
layui的数据表格+springmvc实现搜索功能的例子
2019/09/28 Javascript
使用JavaScrip模拟实现仿京东搜索框功能
2019/10/16 Javascript
基于vue hash模式微信分享#号的解决
2020/09/07 Javascript
Vue自定义表单内容检查rules实例
2020/10/30 Javascript
node脚手架搭建服务器实现token验证的方法
2021/01/20 Javascript
[03:59]第二届DOTA2亚洲邀请赛选手传记-VGJ.rOtk
2017/04/03 DOTA
PyQt5打开文件对话框QFileDialog实例代码
2018/02/07 Python
python验证码识别教程之利用滴水算法分割图片
2018/06/05 Python
python中的句柄操作的方法示例
2019/06/20 Python
python opencv鼠标事件实现画框圈定目标获取坐标信息
2020/04/18 Python
Anconda环境下Vscode安装Python的方法详解
2020/03/29 Python
逼真的HTML5树叶飘落动画
2016/03/01 HTML / CSS
利用 Canvas实现绘画一个未闭合的带进度条的圆环
2019/07/26 HTML / CSS
Kate Spade澳大利亚官方网站:美国设计师手袋品牌
2019/09/10 全球购物
如果重写了对象的equals()方法,需要考虑什么
2014/11/02 面试题
《鹬蚌相争》教学反思
2014/04/22 职场文书
药品营销专业毕业生自荐信
2014/07/02 职场文书
乡领导班子四风问题对照检查材料
2014/09/25 职场文书
领导班子对照检查剖析材料
2014/10/13 职场文书
2015年女生节活动总结
2015/02/27 职场文书
交通事故起诉书
2015/05/19 职场文书