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 22 Javascript
js内存泄露的几种情况详细探讨
May 31 Javascript
点击弹出层外区域关闭弹出层jquery特效示例
Aug 25 Javascript
JavaScript实现url地址自动检测并添加URL链接示例代码
Nov 12 Javascript
js css 实现遮罩层覆盖其他页面元素附图
Sep 22 Javascript
BootStrap入门教程(一)之可视化布局
Sep 19 Javascript
微信开发 使用picker封装省市区三级联动模板
Oct 28 Javascript
全面解析node 表单的图片上传
Nov 21 Javascript
详解jQuery lazyload 懒加载
Dec 19 Javascript
Vue header组件开发详解
Jan 26 Javascript
小程序实现图片预览裁剪插件
Nov 22 Javascript
Nuxt v-bind绑定img src不显示的解决
Dec 05 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猜单词游戏
2015/09/29 PHP
PHP实现文件上传功能实例代码
2017/05/18 PHP
PHP中in_array的隐式转换的解决方法
2018/03/06 PHP
laravel 实现登陆后返回登陆前的页面方法
2019/10/03 PHP
Laravel5.5 数据库迁移:创建表与修改表示例
2019/10/23 PHP
php 函数中静态变量使用的问题实例分析
2020/03/05 PHP
js 变量类型转换常用函数与代码[比较全]
2009/12/01 Javascript
js 纯数字不重复排列的另类方法
2010/07/17 Javascript
js读取cookie方法总结
2014/10/31 Javascript
node.js中的favicon.ico请求问题处理
2014/12/15 Javascript
angular.element方法汇总
2015/01/07 Javascript
浅析Node.js中的内存泄漏问题
2015/06/23 Javascript
百度地图API之本地搜索与范围搜索
2015/07/30 Javascript
实现音乐播放器的代码(html5+css3+jquery)
2015/08/04 Javascript
详解Angular2 关于*ngFor 嵌套循环
2017/05/22 Javascript
vue.js实现的经典计算器/科学计算器功能示例
2018/07/11 Javascript
Vue自定义指令写法与个人理解
2019/02/09 Javascript
vue监听用户输入和点击功能
2019/09/27 Javascript
p5.js临摹动态图形实现方法详解
2019/10/23 Javascript
JavaScript之Blob对象类型的具体使用方法
2019/11/29 Javascript
Vue路由的模块自动化与统一加载实现
2020/06/05 Javascript
python实现封装得到virustotal扫描结果
2014/10/05 Python
Python使用sorted排序的方法小结
2017/07/28 Python
Python设计模式之门面模式简单示例
2018/01/09 Python
Python基于pycrypto实现的AES加密和解密算法示例
2018/04/10 Python
Python实现简单石头剪刀布游戏
2021/01/20 Python
windows下python安装pip方法详解
2020/02/10 Python
HTML5+CSS3实现拖放(Drag and Drop)示例
2014/07/07 HTML / CSS
屈臣氏越南官网:Watsons越南
2021/01/14 全球购物
2014年小学元旦活动方案
2014/02/12 职场文书
奥巴马胜选演讲稿
2014/05/15 职场文书
入党综合考察材料
2014/06/02 职场文书
艺术节开幕词
2015/01/28 职场文书
《玩出了名堂》教学反思
2016/02/17 职场文书
BCL经典机 SONY ICF-5900W电路分析
2022/04/24 无线电
python高温预警数据获取实例
2022/07/23 Python