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中九种常用排序算法
Sep 02 Javascript
再分享70+免费的jquery 图片滑块效果插件和教程
Dec 15 Javascript
JavaScript显示表单内元素数量的方法
Apr 02 Javascript
浅析JavaScript中的array数组类型系统
Jul 18 Javascript
js实现滑动到页面底部自动加载更多功能
Feb 15 Javascript
js实现PC端根据IP定位当前城市地理位置
Feb 22 Javascript
解决webpack -p压缩打包react报语法错误的方法
Jul 03 Javascript
微信小程序实现bindtap等事件传参
Apr 08 Javascript
js实现全选反选不选功能代码详解
Apr 24 Javascript
小程序怎样让wx.navigateBack更好用的方法实现
Nov 01 Javascript
jquery获取input输入框中的值
Nov 13 jQuery
使用konva和vue-konva库实现拖拽滑块验证功能
Apr 27 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 stream_context_create()作用和用法分析
2011/03/29 PHP
PHP 自定义错误处理函数trigger_error()
2013/03/26 PHP
获取PHP警告错误信息的解决方法
2013/06/03 PHP
php浏览历史记录的方法
2015/03/10 PHP
php中使用in_array() foreach array_search() 查找数组是否包含时的性能对比
2015/04/14 PHP
php查询及多条件查询
2017/02/26 PHP
搜索附近的人PHP实现代码
2018/02/11 PHP
PHP 计算至少是其他数字两倍的最大数的实现代码
2020/05/26 PHP
?牟┛途W扣了一??效果出?? target=
2007/05/27 Javascript
单击复制文字兼容各浏览器的完美解决方案
2013/07/04 Javascript
用Node.js通过sitemap.xml批量抓取美女图片
2015/05/28 Javascript
JavaScript实现把数字转换成中文
2015/06/29 Javascript
jquery实现动画菜单的左右滚动、渐变及图形背景滚动等效果
2015/08/25 Javascript
jquery+CSS3实现3D拖拽相册效果
2016/07/18 Javascript
JQuery动态添加Select的Option元素实现方法
2016/08/29 Javascript
浅谈jQuery中的$.extend方法来扩展JSON对象
2017/02/12 Javascript
详解webpack-dev-server 设置反向代理解决跨域问题
2018/04/18 Javascript
JavaScript中set与get方法用法示例
2018/08/15 Javascript
解决vue axios的封装 请求状态的错误提示问题
2018/09/25 Javascript
如何进行微信公众号开发的本地调试的方法
2019/06/16 Javascript
python根据京东商品url获取产品价格
2015/08/09 Python
Python Django切换MySQL数据库实例详解
2019/07/16 Python
利用Python实现手机短信监控通知的方法
2019/07/22 Python
pytorch 修改预训练model实例
2020/01/18 Python
python列表切片和嵌套列表取值操作详解
2020/02/27 Python
浅谈python元素如何去重,去重后如何保持原来元素的顺序不变
2020/02/28 Python
Python实现井字棋小游戏
2020/03/09 Python
详解background属性的8个属性值(面试题)
2020/11/02 HTML / CSS
一些常用的HTML5模式(pattern) 总结
2015/07/14 HTML / CSS
新闻专业推荐信范文
2013/11/20 职场文书
玩具公司的创业计划书
2013/12/31 职场文书
前台文员我鉴定
2014/01/12 职场文书
护理专科毕业生自荐书范文
2014/02/19 职场文书
护理学专业求职信
2014/06/29 职场文书
艺术设计专业毕业生推荐信
2014/07/08 职场文书
2019垃圾分类宣传口号汇总
2019/08/16 职场文书