this 指向 及 调用方式
1. this 指向
函数执行方式 this指向
1.直接圆括号 window
2.对象调用 对象
3.事件触发 触发对象
4.定时器运行 window (常常定义变量存储this以达到this指向特定对象)
5.作为数组对象的某个元素 该数组对象
调用一个函数将暂停当前函数的执行,
传递控制权和参数给新函数,
除此之外,每个函数接收两个附加的参数:this 和 arguments。
this的值取决于调用的模式。
2. 调用方式
js中的四种调用模式: 方法调用模式 函数调用模式 构造器调用模式 apply 调用模式。
方法调用模式:
方法,当一个函数被保存为对象的一个属性时,称此函数为一个方法。
当一个方法被调用时,this被绑定到该对象,
如果一个调用表达式包含一个属性存取表达式(即 . 表达式 或者 [funName]表达式),
那么它被当作一个方法来调用。
通过 this 可取得它所属对象的上下文的方法 称为公共方法。
函数调用模式:
当一个函数并非一个对象的属性时,那么它被当作一个函数来调用。
函数调用模式下,this被绑定到全局对象。(
语言设计上的失误,
若设计正确,当内部函数被调用时, this 应该仍然绑定到外部函数
的 this 变量。解决方案:var that = this ;即缓存当前对象。
)
构造器调用模式
在一个函数前面带上 new 来调用,
将创建一个隐藏连接到该函数的 prototype 成员的新对象,
同时 this 也会被绑定到那个新对象上。
简而言之,结合 new 前缀调用的函数称为构造器函数(通常首字母大写)
apply调用模式(call)
js是一个 函数式的 面向对象的 编程语言,
所以函数可以拥有方法,可以有 apply 方法。
apply方法原理是劫持一个函数的属性和方法,加之在一个拥有arr参数的相同环境使用
(变相继承、扩展参数)
语言设计上的失误,
arguments 并不是一个真正的数值,有 length 属性,可通过下标获取对应元素,
但,它缺少所有数组方法。
this 指向 及 调用方式的更多相关文章
- (三)我的JavaScript系列:不同调用方式的this指向
人生自是有情痴,此恨不关风与月 今天所写的内容,是对之前的内容的总结和扩展.老实说,对于自己之前的一些杜撰和臆测,我并不是很满意.所以这篇博文,我希望能来点干货. 不同调用方式的this指向 在Jav ...
- JS的一些总结(函数声明和函数表达式的区别,函数中的this指向的问题,函数不同的调用方式,函数也是对象,数组中的函数调用)
一.函数声明和函数表达式的区别: 函数声明放在if——else语句中,在IE8中会出现问题 函数表达式则不会 <script> if(true){ function f1(){ conso ...
- JS高级---函数中的this的指向,函数的不同调用方式
函数中的this的指向 普通函数中的this是谁?-----window 对象.方法中的this是谁?----当前的实例对象 定时器方法中的this是谁?----window 构造函数中的this是谁 ...
- 函数的不同调用方式决定了this的指向不同
一.函数的不同调用方式决定了this的指向不同,一般指向调用者 1.普通函数 this指向window的调用者 function fn(){ console.l ...
- Python模块调用方式详解
Python模块调用方式详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 模块,用一砣代码实现了某个功能的代码集合. 类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其 ...
- libcurl 接口调用方式
http://hi.baidu.com/tracyu1026/item/bb6d5def4292b10b570f1d48 libcurl提供了一组C语言API函数直接调用.首先需要提到的两个函数就是c ...
- 浅谈js函数三种定义方式 & 四种调用方式 & 调用顺序
在Javascript定义一个函数一般有如下三种方式: 函数关键字(function)语句: function fnMethodName(x){alert(x);} 函数字面量(Function Li ...
- C++中构造函数的手动和自动调用方式
1,对象的构造通过构造函数来完成,和类名相同且没有返回值,这个时候只有参 数一个特性,构造函数可以自定义参数,这个参数一般而言就是对类进行初始 化来使用的:带有参数的构造函数的意义在于可以使得每 ...
- 【转】java通用URL接口地址调用方式GET和POST方式
java通用URL接口地址调用方式GET和POST方式,包括建立请求和设置请求头部信息等等......... import java.io.ByteArrayOutputStream; import ...
随机推荐
- sitemap index
https://docs.djangoproject.com/en/2.1/ref/contrib/sitemaps/ very good
- 2016 icpc ECfinal && codeforcesgym101194
一不小心惨变旅游队,不过上海的风景不错 顺带找其他队交流一下集训经验...或许可以成为选拔和集训16级的依据 A.直接模3就可以了,2^(3*n)%7=1 C.Mr. Panda and Strips ...
- 静态代码检查findbugs/阿里巴巴开发规范
findbugs,基本上三类严重的bug检测出来都是比较准确的,如下: 阿里巴巴开发规范 前面两类都是比较重要的: 参考: https://blog.csdn.net/qq_27093465/arti ...
- android之自定义弹框
step1 创建窗体 final AlertDialog dialog =new Builder(this).create(); step2 获取View View viewDialog =View. ...
- 模拟实现ATM+购物商城程序
流程图: 需求: ATM:模拟实现一个ATM + 购物商城程序额度 15000或自定义实现购物商城,买东西加入 购物车,调用信用卡接口结账可以提现,手续费5%支持多账户登录支持账户间转账记录每月日常消 ...
- vue2.0子组件修改父组件props数据的值
从vue1.0升级至2.0之后 prop的.sync被去除 因此直接在子组件修改父组件的值是会报错的如下: 目的是为了阻止子组件影响父组件的数据那么在vue2.0之后 如何在子组件修改父组件props ...
- 对客户端攻击:adobe_toolbutton
对客户端攻击:adobe_toolbutton 漏洞简介 远程攻击者可以利用漏洞执行任意指令.当用户打开特定pdf就可以触发payload. 实践过程 输入命令use exploit/windows/ ...
- qt无法定位程序输入点 于动态链接库 qt5core.dll
造成步骤:一开始是将现成的dll[Qt5.9.3]放在文件夹里,然后使用Qt5.7.1编译的exe放进去,产生标题错误 原因:dll库不匹配 解决:使用Qt5.7.1自带的cmd命令行,使用winde ...
- 纯注解方式配置spring+springMVC
1.新建类initConfig,继承AbstractAnnotationConfigDispatcherServletInitializer,并重写getRootConfigClasses().get ...
- P1552 [APIO2012]派遣
链接 https://www.luogu.org/problemnew/show/P1552 思路 忍者数量肯定越多越好 那就从下到上的合并它的孩子 左偏树的话 顺便维护一个tot,大头堆,如果tot ...