javascript实现方法调用与方法触发小结


Posted in Javascript onMarch 26, 2016

在js中,this关键字是一个比较让人有意思的东西,但是它的指向经常让初学者摸不着头脑。

其实要理解这个关键字,需要理清两个问题——“方法的调用和方法的触发”

下面先看一段代码

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>function</title>
<script>
function showThis(){
  console.info(this);
}
  
function Test1(){
  this.f=showThis;
}
function Test2(){
  this.f=function(){
    showThis();
  }
}

showThis();//window
new Test1().f();//Test1  
new Test2().f();//window
</script>
</head>
<body>
</body>
</html>

20行打印出window对象,这个很容易理解,但是21行打印出Test1的实例对象,而22行却打印出window对象。查看Test1和Test2的构造,发现方法f最终都执行了showThis方法。但是showThis中的this指向却不同。这是因为Test1中的f方法直接指向showThis,new Test1().f()是以Test1 的实例直接调用showThis方法,调用者是Test1的实例。而new Test2().f()是在Test2的实例方法f中触发window对象的showThis方法,其中的this就是指向其调用者window而不是触发者Test2的实例。

至此可以发现。this指向的是调用者,而触发者只是推进调用者执行指定方法而已。

Javascript 相关文章推荐
JavaScript CSS修改学习第一章 查找位置
Feb 19 Javascript
jquery json 实例代码
Dec 02 Javascript
jQuery 联动日历实现代码
May 31 Javascript
js借助ActiveXObject实现创建文件
Sep 29 Javascript
jQuery实用小技巧_输入框文字获取和失去焦点的简单实例
Aug 25 Javascript
JS正则验证多个邮箱完整实例【邮箱用分号隔开】
Apr 19 Javascript
jqgrid实现简单的单行编辑功能
Sep 30 Javascript
vue实现图书管理demo详解
Oct 17 Javascript
vue2实现可复用的轮播图carousel组件详解
Nov 27 Javascript
vue2 全局变量的设置方法
Mar 09 Javascript
vue封装自定义指令之动态显示title操作(溢出显示,不溢出不显示)
Nov 12 Javascript
Javascript设计模式之原型模式详细
Oct 05 Javascript
利用jquery制作滚动到指定位置触发动画
Mar 26 #Javascript
jQuery常用的一些技巧汇总
Mar 26 #Javascript
javascript拖拽应用实例(二)
Mar 25 #Javascript
几种经典排序算法的JS实现方法
Mar 25 #Javascript
javascript拖拽应用实例
Mar 25 #Javascript
JavaScript学习笔记之创建对象
Mar 25 #Javascript
JS实现的颜色实时渐变效果完整实例
Mar 25 #Javascript
You might like
PHP SQLite类
2009/05/07 PHP
php中常用的预定义变量小结
2012/05/09 PHP
解析PHP多种序列化与反序列化的方法
2013/06/06 PHP
php去除HTML标签实例
2013/11/06 PHP
详谈symfony window下的安装 安装时候出现的问题以及解决方法
2017/09/28 PHP
浅析PHP数据导出知识点
2018/02/17 PHP
Laravel中正确地返回HTTP状态码方法示例
2019/09/10 PHP
再谈Yii Framework框架中的事件event原理与应用
2020/04/07 PHP
js 函数的执行环境和作用域链的深入解析
2009/11/01 Javascript
基于jQuery的输入框无值自动显示指定数据的实现代码
2011/01/24 Javascript
捕获浏览器关闭、刷新事件不同情况下的处理方法
2013/06/02 Javascript
Jquery判断form表单数据是否变化
2016/03/30 Javascript
微信小程序实现图片预加载组件
2017/01/18 Javascript
React组件之间的通信的实例代码
2017/06/27 Javascript
详解Vue路由钩子及应用场景(小结)
2017/11/07 Javascript
详解Vue CLI3 多页应用实践和源码设计
2018/08/30 Javascript
vue项目接口管理,所有接口都在apis文件夹中统一管理操作
2020/08/13 Javascript
js实现随机圆与矩形功能
2020/10/29 Javascript
python执行系统命令后获取返回值的几种方式集合
2018/05/12 Python
django echarts饼图数据动态加载的实例
2019/08/12 Python
Python3实现监控新型冠状病毒肺炎疫情的示例代码
2020/02/13 Python
python nohup 实现远程运行不宕机操作
2020/04/16 Python
CSS3 icon font完全指南(CSS3 font 会取代icon图标)
2013/01/06 HTML / CSS
使用canvas绘制贝塞尔曲线
2014/12/17 HTML / CSS
html5 figure和figcaption的使用方法
2018/09/10 HTML / CSS
深入理解HTML5定时器requestAnimationFrame的使用
2018/12/12 HTML / CSS
会计电算化专业毕业生推荐信
2013/12/24 职场文书
关于毕业的广播稿
2014/01/10 职场文书
小学生安全保证书
2014/02/01 职场文书
迟到检讨书300字
2014/02/14 职场文书
文化产业实施方案
2014/06/07 职场文书
企业仓管员岗位职责
2014/06/15 职场文书
2014年计生标语
2014/06/23 职场文书
鲁迅故居导游词
2015/02/05 职场文书
大学生党课感想
2015/08/11 职场文书
使用Django实现商城验证码模块的方法
2021/06/01 Python