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 相关文章推荐
Js动态创建div
Sep 25 Javascript
用JS实现3D球状标签云示例代码
Dec 01 Javascript
Javascript自定义函数判断网站访问类型是PC还是移动终端
Jan 10 Javascript
在JS数组特定索引处指定位置插入元素
Jul 27 Javascript
Javascript类型转换的规则实例解析
Feb 23 Javascript
浅谈bootstrap使用中的一些问题以及解决过程
Oct 18 Javascript
判断颜色是否合法的正则表达式(详解)
May 03 Javascript
Vue.js分页组件实现:diVuePagination的使用详解
Jan 10 Javascript
微信小程序之多文件下载的简单封装示例
Jan 29 Javascript
在移动端使用vue-router和keep-alive的方法示例
Dec 02 Javascript
微信小程序bindinput与bindsubmit的区别实例分析
Apr 17 Javascript
JavaScript快速调试的两个技巧
Nov 04 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中动态显示签名和ip原理
2007/03/28 PHP
PHP数组对比函数,存在交集则返回真,否则返回假
2011/02/03 PHP
解析PHP多种序列化与反序列化的方法
2013/06/06 PHP
PHP内核探索:哈希表碰撞攻击原理
2015/07/31 PHP
PHP crc32()函数讲解
2019/02/14 PHP
详解php命令注入攻击
2019/04/06 PHP
中文字符串截取的js函数代码
2013/04/17 Javascript
php is_numberic函数造成的SQL注入漏洞
2014/03/10 Javascript
jQuery $.extend()用法总结
2014/06/15 Javascript
Javascript无参数和有参数类继承问题解决方法
2015/03/02 Javascript
jQuery插件boxScroll实现图片轮播特效
2015/07/14 Javascript
Ionic+AngularJS实现登录和注册带验证功能
2017/02/09 Javascript
tab栏切换原理
2017/03/22 Javascript
jQuery插件FusionWidgets实现的Cylinder图效果示例【附demo源码】
2017/03/23 jQuery
vue2组件之select2调用的示例代码
2017/10/12 Javascript
详解用Node.js写一个简单的命令行工具
2018/03/01 Javascript
JS实现把一个页面层数据传递到另一个页面的两种方式
2018/08/13 Javascript
微信小程序页面渲染实现方法
2019/11/06 Javascript
Python实现的百度站长自动URL提交小工具
2014/06/27 Python
Python利用ORM控制MongoDB(MongoEngine)的步骤全纪录
2018/09/13 Python
对Python3中bytes和HexStr之间的转换详解
2018/12/04 Python
利用Python正则表达式过滤敏感词的方法
2019/01/21 Python
Python中使用双下划线防止类属性被覆盖问题
2019/06/27 Python
10行Python代码计算汽车数量的实现方法
2019/10/23 Python
Django模板标签中url使用详解(url跳转到指定页面)
2020/03/19 Python
Python实现仿射密码的思路详解
2020/04/23 Python
Pycharm如何导入python文件及解决报错问题
2020/05/10 Python
解决python执行较大excel文件openpyxl慢问题
2020/05/15 Python
香港草莓网土耳其网站:Strawberrynet TR
2017/03/02 全球购物
奥地利领先的在线药房:SHOP APOTHEKE
2019/10/07 全球购物
印度领先的眼镜电子商务网站:Lenskart
2019/12/16 全球购物
英国著名的美容护肤和护发产品购物网站:Lookfantastic
2020/11/23 全球购物
《画风》教学反思
2014/04/16 职场文书
党员群众路线教育实践活动剖析材料
2014/10/10 职场文书
单位更名证明
2015/06/18 职场文书
全民创业工作总结
2015/08/13 职场文书