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对文字按照拼音排序实现代码
Dec 27 Javascript
JS常用函数使用指南
Nov 23 Javascript
javascript实现列表滚动的方法
Jul 30 Javascript
Treegrid的动态加载实例代码
Apr 29 Javascript
利用vue写todolist单页应用
Dec 15 Javascript
原生的强大DOM选择器querySelector介绍
Dec 21 Javascript
AngularJS实现路由实例
Feb 12 Javascript
Angular.JS内置服务$http对数据库的增删改使用教程
May 07 Javascript
Vue服务器渲染Nuxt学习笔记
Jan 31 Javascript
mpvue跳转页面及注意事项
Aug 03 Javascript
详解微信小程序回到顶部的两种方式
May 09 Javascript
react 移动端实现列表左滑删除的示例代码
Jul 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
收音机频率指针指示不准确和灵敏度低问题
2021/03/02 无线电
JAVA/JSP学习系列之二
2006/10/09 PHP
win7+apache+php+mysql环境配置操作详解
2013/06/10 PHP
PHP变量赋值、代入给JavaScript中的变量
2015/06/29 PHP
php微信公众号开发之图片回复
2018/10/20 PHP
laravel实现登录时监听事件,添加登录用户的记录方法
2019/09/30 PHP
php+js实现点赞功能的示例详解
2020/08/07 PHP
javascript循环变量注册dom事件 之强大的闭包
2010/09/08 Javascript
js自动闭合html标签(自动补全html标记)
2012/10/04 Javascript
怎样在JavaScript里写一个swing把数据插入数据库
2012/12/10 Javascript
jQuery解析XML文件同时动态增加js文件的方法
2015/06/01 Javascript
Angular中$state.go页面跳转并传递参数的方法
2017/05/09 Javascript
基于JavaScript实现选项卡效果
2017/07/21 Javascript
vue 插值 v-once,v-text, v-html详解
2018/01/19 Javascript
Vue.set()动态的新增与修改数据,触发视图更新的方法
2018/09/15 Javascript
cdn模式下vue的基本用法详解
2018/10/07 Javascript
vue+egg+jwt实现登录验证的示例代码
2019/05/18 Javascript
JS实现动态倒计时功能(天数、时、分、秒)
2019/12/12 Javascript
elementui更改el-dialog关闭按钮的图标d的示例代码
2020/08/04 Javascript
[52:52]完美世界DOTA2联赛PWL S3 LBZS vs access 第一场 12.10
2020/12/13 DOTA
Python3基础之基本运算符概述
2014/08/13 Python
在IIS服务器上以CGI方式运行Python脚本的教程
2015/04/25 Python
Python函数式编程
2017/07/20 Python
Python搭建代理IP池实现存储IP的方法
2019/10/27 Python
Python在centos7.6上安装python3.9的详细教程(默认python版本为2.7.5)
2020/10/15 Python
Marc Jacobs官方网站:美国奢侈品牌
2017/08/29 全球购物
国际象棋商店:The Chess Store
2018/07/09 全球购物
威尔逊皮革:Wilsons Leather
2018/12/07 全球购物
工作表现自我评价
2014/02/08 职场文书
库房保管员岗位职责
2014/04/07 职场文书
个人授权委托书范本
2014/09/14 职场文书
幼儿园大班个人总结
2015/02/28 职场文书
导游词之唐山景点
2019/12/18 职场文书
python b站视频下载的五种版本
2021/05/27 Python
只用20行Python代码实现屏幕录制功能
2021/06/02 Python
Oracle以逗号分隔的字符串拆分为多行数据实例详解
2021/07/16 Oracle