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读取xml
Nov 04 Javascript
快速使用Bootstrap搭建传送带
May 06 Javascript
js带闹铃功能的倒计时代码
Sep 29 Javascript
javascript基于原型链的继承及call和apply函数用法分析
Dec 15 Javascript
JavaScript运动框架 多物体任意值运动(三)
May 17 Javascript
jquery.masonry瀑布流效果
May 25 jQuery
JavaScript实现的斑马线表格效果【隔行变色】
Sep 18 Javascript
微信小程序实现多宫格抽奖活动
Apr 15 Javascript
vue配置font-awesome5的方法步骤
Jan 27 Javascript
详解微信小程序之一键复制到剪切板
Apr 24 Javascript
详细分析vue响应式原理
Jun 22 Javascript
解决vue里a标签值解析变量,跳转页面,前面加默认域名端口的问题
Jul 22 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
phpexcel导出excel的颜色和网页中的颜色显示不一致
2012/12/11 PHP
5种PHP创建数组的实例代码分享
2014/01/17 PHP
php实现仿写CodeIgniter的购物车类
2015/07/29 PHP
分享五个PHP7性能优化提升技巧
2015/12/07 PHP
PHP内核学习教程之php opcode内核实现
2016/01/27 PHP
浅谈PHP的数据库接口和技术
2016/12/09 PHP
PHP编程中的Session阻塞问题与解决方法分析
2017/08/07 PHP
centos7上编译安装php7以php-fpm方式连接apache
2018/11/08 PHP
PHP生成短网址的思路以及实现方法的详解
2019/03/25 PHP
php判断IP地址是否在多个IP段内
2020/08/18 PHP
javaScript中两个等于号和三个等于号之间的区别介绍
2014/06/27 Javascript
Javascript变量的作用域和作用域链详解
2015/04/02 Javascript
jQuery实现的漂亮表单效果代码
2015/08/18 Javascript
拥有一个属于自己的javascript表单验证插件
2016/03/24 Javascript
jQuery实现公告新闻自动滚屏效果实例代码
2016/07/14 Javascript
Vue.js组件tree实现无限级树形菜单
2016/12/02 Javascript
JS实现根据密码长度显示安全条功能
2017/03/08 Javascript
javascript中this用法实例详解
2017/04/06 Javascript
微信小程序ajax实现请求服务器数据及模版遍历数据功能示例
2017/12/15 Javascript
Puppeteer 爬取动态生成的网页实战
2018/11/14 Javascript
详解三种方式解决vue中v-html元素中标签样式
2018/11/22 Javascript
Vue 实现从小到大的横向滑动效果详解
2019/10/16 Javascript
python服务器与android客户端socket通信实例
2014/11/12 Python
基于Python数据可视化利器Matplotlib,绘图入门篇,Pyplot详解
2017/10/13 Python
Python实现PS图像调整颜色梯度效果示例
2018/01/25 Python
Linux下Python安装完成后使用pip命令的详细教程
2018/11/22 Python
Python API自动化框架总结
2019/11/12 Python
Pytorch使用MNIST数据集实现基础GAN和DCGAN详解
2020/01/10 Python
Python获取、格式化当前时间日期的方法
2020/02/10 Python
Python ATM功能实现代码实例
2020/03/19 Python
django中嵌套的try-except实例
2020/05/21 Python
高一物理教学反思
2014/01/24 职场文书
初中班主任评语大全
2014/04/24 职场文书
中考学习决心书
2015/02/04 职场文书
2015年敬老院工作总结
2015/05/18 职场文书
课改心得体会范文
2016/01/25 职场文书