<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<style>
.father {
width: 100px;
height: 100px;
background-color: red;
}
.child {
width: 20px;
height: 20px;
background-color: yellow
}
</style>
</head>
<body>
<div class="father">
<div class="child"></div>
</div>
<script src="jquery-1.11.2.min.js"></script>
<script>
//on方法会向事件监听的处理函数传递一个参数 event.target 处理函数内部的this指向
// event.target 所以打印出来的this就是event.target 即<div class="child"></div>
// $('.child').on('click',function(){
// console.log(this); //<div class="child"></div>
// })
//事件委托,首先按字面的意思就能看你出来,是将事件交由别人来执行,
// 再联想到上面讲的事件冒泡,是不是想到了?对,
// 就是将子元素的事件通过冒泡的形式交由父元素来执行。
// 事件委托不仅实现相同了功能,而且大大减少了DOM操作。
//监听.father下的.child的点击事件
// $('.father').on('click','.child',function(){
// console.log(this); //<div class="child"></div>
// })
 
// $('.child')[0].on('click',function(){
// console.log(this);//<div class="child"></div>
// })
var app={
init:function(){//init()里面的this指的是app
this.$father=$('.father');//给app这个对象绑定一个属性$father
this.$child=$('.child');//给app这个对象绑定一个属性$child
this.bind();//app.bind()
},
bind:function(){
var _this=this;//this指的是app
//监听.father点击事件 监听到click时 向this.sayHi传递了event.target
//即.father的dom对象<div class="father"><div class="child"></div></div>
this.$father.on('click',this.sayHi);
// 将_this.sayHello()改写为_this.sayHello.call(_this)
// sayHello在执行的时候 内部的this指向的app对象本身
this.$child.on('click',function(){
_this.sayHello();
})
//如果没有bind(this),this.sayBye会接受到传递的event.target即.child的dom对象
// 但此时手动绑定了this 而绑定的this与拒收的this是一致的 指代的是app对象
this.$child.on('click',this.sayBye.bind(this))
},
sayHi:function(){
console.log('sayHi',this)//<div class="father"><div class="child"></div></div>
},
sayHello:function(){
console.log('sayHello',this)//app
},
sayBye:function(){
console.log('sayBye',this)//app
}
}
app.init();
</script>
</body>
</html>

JavaScript中this的一些练习的更多相关文章

  1. javascript中的Array对象 —— 数组的合并、转换、迭代、排序、堆栈

    Array 是javascript中经常用到的数据类型.javascript 的数组其他语言中数组的最大的区别是其每个数组项都可以保存任何类型的数据.本文主要讨论javascript中数组的声明.转换 ...

  2. javascript中的this与函数讲解

    前言 javascript中没有块级作用域(es6以前),javascript中作用域分为函数作用域和全局作用域.并且,大家可以认为全局作用域其实就是Window函数的函数作用域,我们编写的js代码, ...

  3. JavaScript 中的数据类型

    Javascript中的数据类型有以下几种情况: 基本类型:string,number,boolean 特殊类型:undefined,null 引用类型:Object,Function,Date,Ar ...

  4. javascript中的操作符详解1

    好久没有写点什么了,根据博主的技术,仍然写一点javascript新手入门文章,接下来我们一起来探讨javascript的操作符. 一.前言 javascript中有许多操作符,但是许多初学者并不理解 ...

  5. 掌握javascript中的最基础数据结构-----数组

    这是一篇<数据结构与算法javascript描述>的读书笔记.主要梳理了关于数组的知识.部分内容及源码来自原作. 书中第一章介绍了如何配置javascript运行环境:javascript ...

  6. javascript中变量提升的理解

    网上找了两个经典的例子 var foo = 1; function bar() { if (!foo) { var foo = 10; } alert(foo); } bar(); // 10 var ...

  7. 前端开发:面向对象与javascript中的面向对象实现(二)构造函数与原型

    前端开发:面向对象与javascript中的面向对象实现(二)构造函数与原型 前言(题外话): 有人说拖延症是一个绝症,哎呀治不好了.先不说这是一个每个人都多多少少会有的,也不管它究竟对生活有多么大的 ...

  8. 简单分析JavaScript中的面向对象

    初学JavaScript的时候有人会认为JavaScript不是一门面向对象的语言,因为JS是没有类的概念的,但是这并不代表JavaScript没有对象的存在,而且JavaScript也提供了其它的方 ...

  9. Javascript中的valueOf与toString

    基本上,javascript中所有数据类型都拥有valueOf和toString这两个方法,null除外.它们俩解决javascript值运算与显示的问题,本文将详细介绍,有需要的朋友可以参考下. t ...

  10. 关于javascript中的this关键字

    this是非常强大的一个关键字,但是如果你不了解它,可能很难正确的使用它. 下面我解释一下如果在事件处理中使用this. 首先我们讨论一下下面这个函数中的this关联到什么. function doS ...

随机推荐

  1. Maven项目构建利器04——Maven的一些核心概念

    1.坐标 1)数学上的坐标: [1].在平面上. 使用X,Y两个向量可以唯一的定位平面上的任意一个点 [2]在空间中, 使用X,Y,Z三个向量可以唯一的定位空间中的任何一个点 2)Maven中的坐标: ...

  2. saiku数据实现实时更新

    (1) # vim saiku-server/tomcat/webapps/ROOT/js/saiku/Settings.yaml 将 LOCALSTORAGE_EXPIRATION: 3600000 ...

  3. linux新建用户并分配sudo权限

    新建用户 useradd [username] 给用户设置密码 passwd [username] 设置sudo权限 首先将sudoers权限设置可写入 chmod u+w /etc/sudoers ...

  4. IDeajCommunity 配置smart tomcat插件

    ntelliJ IDEA社区版没有自带tomcat. 装插件--smart tomcat. IntelliJ IDEA>>Preferences>>Plugins>> ...

  5. PHP漏洞函数

    1. is_numeric函数 bool is_numeric ( mixed $var ) 此函数用于判断变量是否数字或者数字字符串,不仅能接受十进制,还能接受十六进制,这样就有了绕过的方法 < ...

  6. 深入理解JAVA虚拟机 虚拟机字节码执行引擎

    执行引擎 执行引擎是java虚拟机的重要组成部分.它的作用是接收字节码,解析字节码,执行并输出执行结果. 虚拟机是相对于物理机的概念,物理机的执行引擎是直接建立在处理器.寄存器.指令集和操作系统的层面 ...

  7. share point 下载语言包

    可以选择对应语言 日文: https://www.microsoft.com/ja-JP/download/details.aspx?id=42546 中文: https://www.microsof ...

  8. 【shell】sed指定追加模式空间的次数

    最近遇到一个文本复制的场景,需要把文本的每一行都重复输出三次. 这个用awk或者sed实现都还是很简单的. sed代码: [root]$ seq | sed '{h;G;G}' 现在的问题是,如果每行 ...

  9. 查看 XML 文件

    在所有现代浏览器中,均能够查看原始的 XML 文件. 不要指望 XML 文件会直接显示为 HTML 页面. 查看 XML 文件 查看这个 XML 文件:note.xml 打开 XML 文件 - XML ...

  10. UVa 1596 Bug Hunt (string::find && map && 模拟)

    题意 : 给出几组由数组定义与赋值构成的编程语句, 有可能有两种BUG, 第一种为数组下标越界, 第二种为使用尚未定义的数组元素, 叫你找出最早出现BUG的一行并输出, 每组以' . '号分隔, 当有 ...