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 相关文章推荐
基于jquery的关于动态创建DOM元素的问题
Dec 24 Javascript
原生js 秒表实现代码
Jul 24 Javascript
js动态创建标签示例代码
Jun 09 Javascript
网页从弹窗页面单选框传值至父页面代码分享
Sep 29 Javascript
jquery 实现输入邮箱时自动补全下拉提示功能
Oct 04 Javascript
jQuery实现简单的DIV拖动效果
Feb 19 Javascript
javascript瀑布流式图片懒加载实例
Jun 28 Javascript
jquery replace方法去空格
May 08 jQuery
layer实现弹出层自动调节位置
Sep 05 Javascript
基于JavaScript实现控制下拉列表
May 08 Javascript
浅谈Vue使用Elementui修改默认的最快方法
Dec 05 Vue.js
详解微信小程序轨迹回放实现及遇到的坑
Feb 02 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代码
2012/06/08 PHP
Laravel 5 框架入门(二)构建 Pages 的管理功能
2015/04/09 PHP
javaScript 判断字符串是否为数字的简单方法
2009/07/25 Javascript
EasyUi tabs的高度与宽度根据IE窗口的变化自适应代码
2010/10/26 Javascript
javascript读取Xml文件做一个二级联动菜单示例
2014/03/17 Javascript
鼠标经过子元素触发mouseout,mouseover事件的解决方案
2015/07/26 Javascript
jQuery实现带有上下控制按钮的简单多行滚屏效果代码
2015/09/04 Javascript
BootStrap 实现各种样式的进度条效果
2016/12/07 Javascript
js图片加载效果实例代码(延迟加载+瀑布流加载)
2017/05/12 Javascript
AngularJS中controller控制器继承的使用方法
2017/11/03 Javascript
Angular浏览器插件Batarang介绍及使用
2018/02/07 Javascript
浅谈vue项目打包优化策略
2018/09/29 Javascript
浅谈一个webpack构建速度优化误区
2019/06/24 Javascript
微信小程序—setTimeOut定时器的问题及解决
2019/07/26 Javascript
vue3.0中setup使用(两种用法)
2020/12/02 Vue.js
Python中使用HTMLParser解析html实例
2015/02/08 Python
python3简单实现微信爬虫
2015/04/09 Python
Python变量作用范围实例分析
2015/07/07 Python
浅析python中numpy包中的argsort函数的使用
2018/08/30 Python
python看某个模块的版本方法
2018/10/16 Python
Python之时间和日期使用小结
2019/02/14 Python
Django如何简单快速实现PUT、DELETE方法
2019/07/24 Python
python实现代码统计器
2019/09/19 Python
Pandas-Cookbook 时间戳处理方式
2019/12/07 Python
Django CSRF认证的几种解决方案
2020/03/03 Python
详解CSS3选择器:nth-child和:nth-of-type之间的差异
2017/09/18 HTML / CSS
美国在线纱线商店:Darn Good Yarn
2019/03/20 全球购物
机修工岗位职责
2013/11/24 职场文书
市场营销职业生涯规划书范文
2014/01/12 职场文书
一年级小学生评语
2014/04/22 职场文书
重阳节活动总结
2014/08/27 职场文书
关于对大人不礼貌的检讨书
2014/09/29 职场文书
群众路线剖析材料(四风)
2014/11/05 职场文书
老公写给老婆的检讨书
2015/05/06 职场文书
给校长的建议书作文400字
2015/09/14 职场文书
HTML通过表单实现酒店筛选功能
2021/05/18 HTML / CSS