JS中的this的应用总结
简述this的用法
“this是由被调用的方式确定”这个事实,使得this可以被改变,从而为函数增加了动态性,可变性,使得变成更加灵活。目前因为工作经验有限,暂时总结
一下五种情况下的this的用法,以后有时间应该从ECMA规范上来深入地理解一下this的应用。
1.情况一:以函数的形式调用,this是window
console.log(this);//window
function fu(){
console.log(this);
}
fu();//window
2.情况二:以方法的形式调用,this是调用方法的对象
var obj ={name:'this'};
function foo(){
console.log(this);
}
obj.foo=foo;
obj.foo();//输出obj { name: 'this', foo: [Function: foo] }
3.情况三 : 以构造函数的形式调用
function D() {
this.name ='test';
this.age =18;
console.log(this);
}
var d = new D();//输出d对象
d.name ='hewenfeng';
D();//window
console.log(d);//输出d对象
4.情况四: 在全局作用域中调用
console.log(this);//window
5. 情况五:在响应函数中,给谁绑定事件,this就是谁。
<!DOCTYPE HTML>
<html >
<head>
<meta charset="UTF-8"> </head>
<body>
<div id="b" onclick="console.log(this)">
<div>
</body>
</html>
输出:div元素本身 <!DOCTYPE HTML>
<html >
<head>
<meta charset="UTF-8">
</head>
<body>
<div id="b" onclick="console.log(this)">
<div> <script type="text/javascript">
var c=document.getElementById("b");
c.onclick=function(){console.log(1)} </script>
</body>
</html>
输出:1
onclick的绑定方式会覆盖内联式的事件绑定。也可以在c.onclick里输出this,可知道this代表div元素本身。 <!DOCTYPE HTML>
<html >
<head>
<meta charset="UTF-8">
</head>
<body>
<div id="b" onclick="console.log(this)">
<div> <script type="text/javascript">
var c=document.getElementById("b");
c.onclick=function(){console.log(1)}
c.addEventListener("click",function(){alert('2')},false)
</script>
</body>
</html>
输出:1,弹出
addEventListener不会覆盖c.onclick绑定的函数,(自然也不会覆盖内联的onclick,addEventListener就是以叠加的方式绑定事件处理函数的,
就像用addEventListener也可以绑定几个事件处理函数一样)也可以在addEventListener的事件处理函数里输出this,可知道this代表div元素本身。
JS中的this的应用总结的更多相关文章
- 5.0 JS中引用类型介绍
其实,在前面的"js的六大数据类型"文章中稍微说了一下引用类型.前面我们说到js中有六大数据类型(五种基本数据类型 + 一种引用类型).下面的章节中,我们将详细讲解引用类型. 1. ...
- 【repost】JS中的异常处理方法分享
我们在编写js过程中,难免会遇到一些代码错误问题,需要找出来,有些时候怕因为js问题导致用户体验差,这里给出一些解决方法 js容错语句,就是js出错也不提示错误(防止浏览器右下角有个黄色的三角符号,要 ...
- JS中给正则表达式加变量
前不久同事询问我js里面怎么给正则中添加变量的问题,遂写篇博客记录下. 一.字面量 其实当我们定义一个字符串,一个数组,一个对象等等的时候,我们习惯用字面量来定义,例如: var s = &quo ...
- js中几种实用的跨域方法原理详解(转)
今天研究js跨域问题的时候发现一篇好博,非常详细地讲解了js几种跨域方法的原理,特分享一下. 原博地址:http://www.cnblogs.com/2050/p/3191744.html 下面正文开 ...
- 关于js中的this
关于js中的this this是javascript中一个很特别的关键字,也是一种很复杂的机制,学习this的第一步就是要明白this既不指向函数自身也不指向函数的词法作用域,this实际上是函数被调 ...
- 表值函数与JS中split()的联系
在公司用云平台做开发就是麻烦 ,做了很多功能或者有些收获,都没办法写博客,结果回家了自己要把大脑里面记住的写出来. split()这个函数我们并不陌生,但是当前台有许多字段然后随意勾选后的这些参数传递 ...
- JS中 call() 与apply 方法
1.方法定义 call方法: 语法:call([thisObj[,arg1[, arg2[, [,.argN]]]]]) 定义:调用一个对象的一个方法,以另一个对象替换当前对象. 说明: call ...
- 在node.js中,使用基于ORM架构的Sequelize,操作mysql数据库之增删改查
Sequelize是一个基于promise的关系型数据库ORM框架,这个库完全采用JavaScript开发并且能够用在Node.JS环境中,易于使用,支持多SQL方言(dialect),.它当前支持M ...
- 分析js中的constructor 和prototype
在javascript的使用过程中,constructor 和prototype这两个概念是相当重要的,深入的理解这两个概念对理解js的一些核心概念非常的重要. 我们在定义函数的时候,函数定义的时候函 ...
- 如何在Node.js中合并两个复杂对象
通常情况下,在Node.js中我们可以通过underscore的extend或者lodash的merge来合并两个对象,但是对于像下面这种复杂的对象,要如何来应对呢? 例如我有以下两个object: ...
随机推荐
- 【专章】dp入门
动态规划(简称dp),可以说是各种程序设计中遇到的第一个坎吧,这篇博文是我对dp的一点点理解,希望可以帮助更多人dp入门. ***实践是检验真理的唯一标准,看再多文章不如自己动手做几道!!!*** 先 ...
- 【POJ】2348 Euclid's Game(扩欧)
Description Two players, Stan and Ollie, play, starting with two natural numbers. Stan, the first pl ...
- Win7 32位系统下Sublime text 3的安装以及配置C/C++、java、python的开发环境方法
本人初学者,此文仅是对这几天鼓捣subime text 3一点微不足道的经验总结,如有明显错误,欢迎指正! 好了,废话少说,进入正题,之前编程java一直用的是eclipse,java的主流IDE,后 ...
- PowerBI开发 第七篇:数据集和数据刷新
PowerBI报表是基于数据分析的引擎,数据真正的来源(Data Source)是数据库,文件等数据存储媒介,PowerBI支持的数据源类型多种多样.PowerBI Service(云端)有时不直接访 ...
- MySQL Windows版安装详解
一.下载MySQL MySQL官网https://dev.mysql.com提供了Windows下的安装版msi和解压版zip,其中均包含32和64位版本,mis版本与SqlServer安装基本一致N ...
- netsh用法
netsh(Network Shell) 是一个windows系统本身提供的功能强大的网络配置命令行工具. 导出配置脚本:netsh -c interface ip dump > c:\inte ...
- zoj 2022
分析: 组合数学类型的题目. 正常的话可能会去分解1~N数里面有几个5和2,但是这样的复杂度为O(nlogn). 其实有更巧妙的办法,可以把问题分解成子问题. 可以发现N!末尾的0与1~N中有几个5的 ...
- 吐槽CSDN--想钱想疯了--阅读全文需要关闭广告屏蔽
吐槽CSDN 想钱想疯了–阅读全文需要关闭广告屏蔽 近来csdn开始主推博客皮肤升级,说白了就是有一套新的盈利模式,具体怎么操作呢: 1. 采用信息流方式,博客内容变成类似朋友圈.微博.知乎那样的信息 ...
- Iframe父子窗口之间的跨域事件调用和传值
实现方案1:location.hash传值 父页面:parent.html(所在域:www.parent.com) 子页面:child.html(所在域:www.child.com) 要实现父子页面双 ...
- CoreCLR源码探索(七) JIT的工作原理(入门篇)
很多C#的初学者都会有这么一个疑问, .Net程序代码是如何被机器加载执行的? 最简单的解答是, C#会通过编译器(CodeDom, Roslyn)编译成IL代码, 然后CLR(.Net Framew ...