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 ...
随机推荐
- Could not complete request
Could not complete request com.alibaba.dubbo.rpc.RpcException: Forbid consumer 10.254.1.26 access se ...
- PyTorch 中,nn 与 nn.functional 有什么区别?
作者:infiniteft链接:https://www.zhihu.com/question/66782101/answer/579393790来源:知乎著作权归作者所有.商业转载请联系作者获得授权, ...
- Spring Boot 2 (四):使用 Docker 部署 Spring Boot
Spring Boot 2 (四):使用 Docker 部署 Spring Boot Docker 技术发展为微服务落地提供了更加便利的环境,使用 Docker 部署 Spring Boot 其实非常 ...
- vue 起步
vue 官网 目前最火的前端框架当属Vue.js了,很多使用过vue的程序员这样评价它,“vue.js兼具angular.js和react.js的优点,并剔除了它们的缺点”.授予了这么高的评价的vue ...
- Kali系列之hydra ssh密码爆破
环境 kali 192.168.137.131 靶机 192.168.137.133 语句 hydra -l root -P /home/chenglee/zidian/wordlist.TXT -t ...
- 网络对抗——web基础
网络对抗--web基础 实践内容 (1)Web前端HTML (2)Web前端javascipt (3)Web后端:MySQL基础:正常安装.启动MySQL,建库.创建用户.修改密码.建表 (4)Web ...
- UVa Live 4670 Dominating Patterns - Aho-Corasick自动机
题目传送门 快速的通道I 快速的通道II 题目大意 给定一堆短串,和一个文本串,问哪些短串在文本串中出现的次数最多. 我觉得刘汝佳的做法,时间复杂度有问题.只是似乎这道题短串串长太短不好卡.比如给出的 ...
- overture里设置踏板标记
在学习如何设置踏板标记之前,我们先来了解什么是踏板标记.踏板标记一般是使用在乐谱上,众所周知,钢琴有三个踏板,每个踏板的作用都不一样:右边的踏板称为“延音踏板”,是用来延长琴弦振动的时间,使音延长的效 ...
- DNS 基础
DNS Domain Name System:域名系统,主要用来将域名解析为IP.DNS以及相关系统存在,主要有两个原因: 可以让人容易记住名字,而不是记住IP: 它允许服务器改变IP,但是采用同样的 ...
- POJ 1251 + HDU 1301 Jungle Roads 【最小生成树】
题解 这是一道裸的最小生成树题,拿来练手,题目就不放了 个人理解 Prim有些类似最短路和贪心,不断找距当前点最小距离的点 Kruskal类似于并查集,不断找最小的边,如果不是一棵树的节点就合并为一 ...