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生成随机字符串的方法
Mar 19 Javascript
javascript函数特点实例分析
May 14 Javascript
js实现带农历和八字等信息的日历特效
May 16 Javascript
BootStrap实现邮件列表的分页和模态框添加邮件的功能
Oct 13 Javascript
微信小程序 input输入框详解及简单实例
Jan 10 Javascript
老生常谈jacascript DOM节点获取
Apr 17 Javascript
微信小程序 实现点击添加移除class
Jun 12 Javascript
js处理包含中文的字符串实例
Oct 11 Javascript
AngularJS实现注册表单验证功能
Oct 16 Javascript
JS实现Cookie读、写、删除操作工具类示例
Aug 28 Javascript
Vue CLI3中使用compass normalize的方法
May 30 Javascript
VUE子组件向父组件传值详解(含传多值及添加额外参数场景)
Sep 01 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
使用Apache的rewrite技术
2006/06/22 PHP
解析PHP中empty is_null和isset的测试
2013/06/29 PHP
ThinkPHP3.1.x修改成功与失败跳转页面的方法
2017/09/29 PHP
超级兔子让浮动层消失的前因后果
2007/03/09 Javascript
用JS实现一个TreeMenu效果分享
2011/08/28 Javascript
javascript 闭包
2011/09/15 Javascript
JavaScript调试技巧之console.log()详解
2014/03/19 Javascript
javascript面向对象特性代码实例
2014/06/12 Javascript
Nodejs学习笔记之入门篇
2015/04/16 NodeJs
jquery通过扩展select控件实现支持enter或focus选择的方法
2015/11/19 Javascript
利用纯JS实现像素逐渐显示的方法示例
2017/08/14 Javascript
vue父子组件的嵌套的示例代码
2017/09/08 Javascript
jquery实现联想词搜索框和搜索结果分页的示例
2018/10/10 jQuery
JavaScript创建防篡改对象的方法分析
2018/12/30 Javascript
vue自定义指令directive的使用方法
2019/04/07 Javascript
JS算法教程之字符串去重与字符串反转
2020/12/15 Javascript
python单链表实现代码实例
2013/11/21 Python
Python 数据结构之旋转链表
2017/02/25 Python
200行自定义python异步非阻塞Web框架
2017/03/15 Python
JPype实现在python中调用JAVA的实例
2017/07/19 Python
python 用正则表达式筛选文本信息的实例
2018/06/05 Python
Python3.6简单反射操作示例
2018/06/14 Python
python用post访问restful服务接口的方法
2018/12/07 Python
python文字转语音的实例代码分析
2019/11/12 Python
Flask框架搭建虚拟环境的步骤分析
2019/12/21 Python
python 线性回归分析模型检验标准--拟合优度详解
2020/02/24 Python
解决python父线程关闭后子线程不关闭问题
2020/04/25 Python
python代码实现将列表中重复元素之间的内容全部滤除
2020/05/22 Python
如何用python实现一个HTTP连接池
2021/01/14 Python
JavaScript获取当前url根目录(路径)
2014/02/19 面试题
婚礼新郎父母答谢词
2014/01/16 职场文书
普通大学毕业生自荐信范文
2014/02/23 职场文书
群众路线教育实践活动批评与自我批评
2014/09/15 职场文书
小学元宵节活动总结
2015/02/06 职场文书
win10双系统怎么删除一个系统?win10电脑有两个系统删除一个的操作方法
2022/07/15 数码科技
在ubuntu下安装go开发环境的全过程
2022/08/05 Golang