JavaScript进阶2-学习笔记
文章目录
- JavaScript进阶2-学习笔记
- this指针
- 如何改变this指向
- 事件委托、事件冒泡
JavaScript进阶2-学习笔记
this指针
This是什么?
this是Javascript语言的一个关键字。 它代表函数运行时,自动生成的一个内部对象,只能在函数内部使用,随着函数使用场合的不同,this的值会发生变化,指向是不确定的,也就是说是可以动态改变的;但是有一个总的原则,那就是this指的是,调用函数的那个对象。 (this 一般情况下,都是指向函数的拥有者)
//this指针
//1)简单函数function test(){console.log(this) //它代表函数运行时,自动生成一个内部对象};test(); //指向的是调用者window.test();//严格模式function test(){"use strict"; //严格模式 console.log(this) //undefined};test();//2) 数组function f1(){console.log(this)};var arr = [f1,2,3];arr[0](); // this= arr arr是调用者 obj.name obj[name]var f2 = arr[0]; //数组赋值处理后f2(); //指向的是调用者window window.f2();//3)内置函数 setTimeout function f1(){console.log(this)};//延迟执行setTimeout(f1,1000); //window//4)回调函数var a = [1,2,3,5].filter(function(item,index){console.log(this) //window});a();//5)对象中var obj = {};obj.name = 123;obj.action = function(){console.log(this); // // this指向obj};function f1(){console.log(this) //this指向obj};obj.action(); // this指向objobj.f2 = f1;obj.f2(); //5-1) 字面量var obj3 = {name:'amy',action:function(){console.log(this)}};obj3.action();//6)构造函数function F5(name,age){this.name = name;this.age = age;this.action = function(){console.log(this)}};var f5 = new F5('a',2);f5.action(); //this 指向的是新创建的对象, 而不是构造函数本身。
如何改变this指向
//如何改变this指向 apply callvar a = 10;function f6(name,age){return this.a +" " +name +" "+age;};f6('a',10); // 10 a 10var obj6 ={a:100,action:f6};obj6.action('a',10); // 100 a 10//修改this指向
//1) obj6.action 指向windowconsole.log(obj6.action.call(window,'w',10)); // 10 w 10console.log(obj6.action.apply(this,['w',10])); // 10 w 10console.log(obj6.action.apply(obj6,['w',10])); // 100 w 10//bind() 绑定thisvar a = 10;function f1(name,age){return this.a +" " +name +" "+age;};var obj1 ={a:11111,action1:f1};var obj2 ={a:22222,action2:f1};var a1 = f1.bind(obj1,'a',10);a1() // f1()无调用者 但是绑定obj1, this指向就是obj1console.log(a1.call(obj2,'a',10)); //11111 a 10 绑定后不能改变thisconsole.log(a1.apply(obj2,['a',10])); //面试题
//在函数自执行里,this 指向的是 window 对象var number = 1;var obj = {number:2,showNumber:function(){this.number = 3;(function(){console.log(this.number);})();console.log(this.number);}};obj.showNumber(); //1 3
事件委托、事件冒泡
//事件委托 冒泡
//e.target e.currentTarget this
//event 对象代表事件的状态
//e.target 触发事件
//e.currentTarget 绑定事件
//target是真正发生事件的DOM元素,而currentTarget是当前事件发生在哪个DOM元素上
//this 绑定事件document.querySelector(".div1").onclick = function(e){// e.target.style.color = "red";// e.currentTarget.style.color = "red";this.style.color = "red";}
//事件冒泡和捕获 document.querySelector(".d1").onclick = function(e){console.log('d1');};document.querySelector(".d2").onclick = function(e){console.log('d2');};document.querySelector(".d3").onclick = function(e){console.log('d3');e.stopPropagation(); //阻止事件冒泡};
//事件委托
//委托给别人来处理// var ul = document.querySelector(".ul");// var _li = ul.getElementsByTagName("li");// for(var i=0;i<_li.length;i++){// _li[i].onclick = function(){// console.log(this.innerHTML);// }// };//委托 将事件绑定在父对象上 点击子节点通过事件冒泡到父来处理var ul = document.querySelector(".ul");ul.onclick = function(e){if(e.target.nodeName=='LI'){ //针对LI元素来处理console.log(e.target.innerHTML);}}
【可参考】https://www.cnblogs.com/Chen-XiaoJun/p/6210987.html
JavaScript进阶2-学习笔记相关推荐
- 7 种 Javascript 常用设计模式学习笔记
7 种 Javascript 常用设计模式学习笔记 由于 JS 或者前端的场景限制,并不是 23 种设计模式都常用. 有的是没有使用场景,有的模式使用场景非常少,所以只是列举 7 个常见的模式 本文的 ...
- JavaScript 权威指南-学习笔记(一)
本文所有教程及源码.软件仅为技术研究.不涉及计算机信息系统功能的删除.修改.增加.干扰,更不会影响计算机信息系统的正常运行.不得将代码用于非法用途,如侵立删! JavaScript 权威指南-学习笔记 ...
- JavaScript进阶5-学习笔记
文章目录 JavaScript进阶5-学习笔记 例子 JavaScript进阶5-学习笔记 参考理解:https://blog.csdn.net/hhhmonkey/article/details/1 ...
- JavaScript进阶4-学习笔记
文章目录 JavaScript进阶4-学习笔记 递归 JavaScript进阶4-学习笔记 前端: 根据Ui写页面,使用vuecli+vue---测试功能---需要数据(json,array,字符串) ...
- JavaScript进阶3-学习笔记
文章目录 JavaScript进阶3-学习笔记 闭包 JavaScript进阶3-学习笔记 //组件封装 什么是封装? 将冗余的代码精简化 例如:写代码:a页面有一个函数,b页面也需要这个函数,很多人 ...
- JavaScript高级程序设计学习笔记(三)
分享一下第五章(引用类型)的笔记,内容比较多,我拆成了两部分,今天这部分是关于Object.Array.Date和RegExp类型的. 以下的笔记是书上一些我以前学习的时候,没有太重视的js基础知识, ...
- vn.py全实战进阶课程学习笔记(零)
目录 写在前面 MySQL数据库配置 安装mysq 创建数据库 vnpy数据库配置 rqdata数据服务配置 申请rqdata试用权限 vnpy参数配置 simnow仿真环境配置 准备账号 接口登录 ...
- 36篇博文带你学完opencv :python+opencv进阶版学习笔记目录
基础版学习笔记传送门 36篇博文带你学完opencv :python3+opencv学习笔记汇总目录(基础版) 进阶版笔记 项目 opencv进阶学习笔记1: 调用摄像头用法大全(打开摄像头,打开摄像 ...
- javascript高程3 学习笔记(二)
ECMAScript function的理解 ECMAScript 函数与其他语言函数最大的不同在于,其不介意传入多少参数以及参数的类型 比如函数的形参有两个,但是调用函数传入的参数可以写一个,三个或 ...
最新文章
- 重磅直播|基于激光雷达的感知、定位导航应用
- Redis重新连接弹性
- 传统公司部署OpenStack(t版)简易介绍(二)——Keystone组件部署
- IE9浏览Flash页面时显示错位并不停地闪烁
- dash 和 bash 切换
- oracle sql取查询结果第一条,SQL获取第一条记录的方法(sqlserver、oracle、mysql数据库)...
- 基于Python3-Pygame的推箱子游戏
- 在真机上 模拟GPS
- GSEA分析详细步骤
- 网安自学之路-信息安全数学基础(五)-近世代数
- Solidity教程序列1 - 类型介绍
- Arduino mixly 点灯科技(blinker) 在线电压监测(带电压高低提醒)
- 控制工程——传递函数与状态方程
- 历经8年美团成功上市!回到起点看王兴,梦想并非遥不可及!
- 已知线段上某点与起点的距离,求该点的坐标
- Mac 运行windows软件
- mycat连接数据库8.0以上 处理程序连接query_cache_size报错信息 mycat升级数据库踩坑
- Unity 碰撞距离设定
- 互联网快讯:猿辅导凭优质教学获好评;粉笔科技积极布局打造双核驱动;科创板上市公司突破400家
- 我逼走创业合伙人,白干七年净身出户,我是跪着前行的CEO
热门文章
- 05.内存管理.md
- 多级神经网络结构表达文档语义性能更好吗
- ES6新增数据类型符号(2):共享符号与知名符号
- 1097 Deduplication on a Linked List (25 分)_35行代码AC
- esp8266驱动oled屏幕_为什么“更好的OLED电视”在海信?
- Eclipse中io操作提示找不到文件
- Docker通过Cgroup 资源配置
- 进入工程制图闪退_工程整体一
- 工艺路线和工序有差别吗_智能制造、数字化车间、数字化企业需要结构化工艺吗?...
- Android下检测网络连接 3G WIFI