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 相关文章推荐
新手入门常用代码集锦
Jan 11 Javascript
js异或加解密效果代码
Jun 25 Javascript
javascript下arguments,caller,callee,call,apply示例及理解
Dec 24 Javascript
JavaScript 读取元素的CSS信息的代码
Feb 07 Javascript
一个简单的JS鼠标悬停特效具体方法
Jun 17 Javascript
javascript jquery对form元素的常见操作详解
Jun 12 Javascript
jQuery增加、删除及修改select option的方法
Aug 19 Javascript
学习使用bootstrap的modal和carousel
Dec 09 Javascript
angular使用bootstrap方法手动启动的实例代码
Jul 18 Javascript
Vue 2.0入门基础知识之内部指令详解
Oct 15 Javascript
Node.js中的cluster模块深入解读
Jun 11 Javascript
详谈Vue.js框架下main.js,App.vue,page/index.vue之间的区别
Aug 12 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
qq登录,新浪微博登录接口申请过程中遇到的问题
2014/07/22 PHP
php中smarty实现多模版网站的方法
2015/06/11 PHP
PHP.ini安全配置检测工具pcc简单介绍
2015/07/02 PHP
利用php输出不同的心形图案
2016/04/22 PHP
PHP数组对象与Json转换操作实例分析
2019/10/22 PHP
laravel解决迁移文件一次删除创建字段报错的问题
2019/10/24 PHP
再次分享18个非常棒的jQuery表格插件
2011/04/10 Javascript
JQUERY对单选框(radio)操作的小例子
2013/04/25 Javascript
javascript通过className来获取元素的简单示例代码
2014/01/10 Javascript
js表单中选择框值的获取及表单的序列化
2015/12/17 Javascript
JavaScript中输出信息的方法(信息确认框-提示输入框-文档流输出)
2016/06/12 Javascript
JS中对Cookie的操作详解
2016/08/05 Javascript
使用JS批量选中功能实现更改数据库中的status状态值(批量展示)
2016/11/22 Javascript
JavaScript实现数组降维详解
2017/01/05 Javascript
JavaScript面向对象精要(下部)
2017/09/12 Javascript
Vue 开发必须知道的36个技巧(小结)
2019/10/09 Javascript
用Python的pandas框架操作Excel文件中的数据教程
2015/03/31 Python
Python检测网站链接是否已存在
2016/04/07 Python
Python书单 不将就
2017/07/11 Python
Python线程创建和终止实例代码
2018/01/20 Python
python tornado微信开发入门代码
2018/08/24 Python
详解如何用TensorFlow训练和识别/分类自定义图片
2019/08/05 Python
python代码如何注释
2020/06/01 Python
详解HTML5常用的语义化标签
2019/09/27 HTML / CSS
印尼最大的在线购物网站:MatahariMall.com
2016/08/26 全球购物
TripAdvisor台湾:全球最大旅游网站
2018/08/26 全球购物
PHP引擎php.ini参数优化深入讲解
2021/03/24 PHP
心理健康课教学反思
2014/02/13 职场文书
品牌推广策划方案
2014/05/28 职场文书
房屋财产继承协议书范本
2014/11/03 职场文书
2014年幼儿园教学工作总结
2014/12/04 职场文书
公路施工安全责任书
2015/05/08 职场文书
幼儿园托班开学寄语(2015秋季)
2015/05/27 职场文书
幼儿园大班教师随笔
2015/08/14 职场文书
python requests模块的使用示例
2021/04/07 Python
解决Vue+SpringBoot+Shiro跨域问题
2021/06/09 Vue.js