函数中的this的四种绑定形式
目录
正文

- function fire () {
- console.log(this === window)
- }
- fire(); // 输出true

- function fire () {
- // 我是被定义在函数内部的函数哦!
- function innerFire() {
- console.log(this === window)
- }
- innerFire(); // 独立函数调用
- }
- fire(); // 输出true


- var obj = {
- fire: function () {
- function innerFire() {
- console.log(this === window)
- }
- innerFire(); // 独立函数调用
- }
- }
- obj.fire(); //输出 true

this的隐式绑定


- var obj = {
- a: 1,
- fire: function () {
- console.log(this.a)
- }
- }
- obj.fire(); // 输出1


- // 我是第一段代码
- function fire () {
- console.log(this.a)
- }
- var obj = {
- a: 1,
- fire: fire
- }
- obj.fire(); // 输出1
- // 我是第二段代码
- var obj = {
- a: 1,
- fire: function () {
- console.log(this.a)
- }
- }
- obj.fire(); // 输出1

隐式绑定下,作为对象属性的函数,对于对象来说是独立的

- var obj = {
- a: 1, // a是定义在对象obj中的属性 1
- fire: function () {
- console.log(this.a)
- }
- }
- var a = 2; // a是定义在全局环境中的变量 2
- var fireInGrobal = obj.fire;
- fireInGrobal(); // 输出 2


- var a = 2;
- var obj = {
- a: 1, // a是定义在对象obj中的属性
- fire: function () {
- console.log(this.a)
- }
- }
- function otherFire (fn) {
- fn();
- }
- otherFire(obj.fire); // 输出2

在一串对象属性链中,this绑定的是最内层的对象

- var obj = {
- a: 1,
- obj2: {
- a: 2,
- obj3: {
- a:3,
- getA: function () {
- console.log(this.a)
- }
- }
- }
- }
- obj.obj2.obj3.getA(); // 输出3

this的显式绑定:(call和bind方法)


- var obj = {
- a: 1, // a是定义在对象obj中的属性
- fire: function () {
- console.log(this.a)
- }
- }
- var a = 2; // a是定义在全局环境中的变量
- var fireInGrobal = obj.fire;
- fireInGrobal(); // 输出2
- fireInGrobal.call(obj); // 输出1


- var obj = {
- a: 1, // a是定义在对象obj中的属性
- fire: function () {
- console.log(this.a)
- }
- }
- var a = 2; // a是定义在全局环境中的变量
- var fn = obj.fire;
- var fireInGrobal = function () {
- fn.call(obj) //硬绑定
- }
- fireInGrobal(); // 输出1

- var fireInGrobal = function () {
- fn.call(obj) //硬绑定
- }
- var fireInGrobal = fn.bind(obj);

new绑定


- function foo (a) {
- this.a = a;
- }
- var a1 = new foo (1);
- var a2 = new foo (2);
- var a3 = new foo (3);
- var a4 = new foo (4);
- console.log(a1.a); // 输出1
- console.log(a2.a); // 输出2
- console.log(a3.a); // 输出3
- console.log(a4.a); // 输出4
函数中的this的四种绑定形式的更多相关文章
- 【javascript】函数中的this的四种绑定形式
目录 this的默认绑定 this的隐式绑定 隐式绑定下,作为对象属性的函数,对于对象来说是独立的 在一串对象属性链中,this绑定的是最内层的对象 this的显式绑定:(call和bind方法) n ...
- 【javascript】函数中的this的四种绑定形式 — 大家准备好瓜子,我要讲故事啦~~
javascript中的this和函数息息相关,所以今天,我就给大家详细地讲述一番:javascript函数中的this 一谈到this,很多让人晕晕乎乎的抽象概念就跑出来了,这里我就只说最 ...
- this的四种绑定形式
一 , this的默认绑定 当一个函数没有明确的调用对象的时候,也就是单纯作为独立函数调用的时候,将对函数的this使用默认绑定:绑定到全局的window对象. 一个例子 function fire ...
- JavaScript函数中的this四种绑定形式
this的默认绑定.隐式绑定.显示绑定.new绑定 <script> //全局变量obj_value ; //1.window调用 console.log(`*************** ...
- this的四种绑定规则总结
一.默认绑定 1.全局环境中,this默认绑定到window 2.函数独立调用时,this默认绑定到window console.log(this === window);//true functio ...
- mysql中模糊查询的四种用法介绍
下面介绍mysql中模糊查询的四种用法: 1,%:表示任意0个或多个字符.可匹配任意类型和长度的字符,有些情况下若是中文,请使用两个百分号(%%)表示. 比如 SELECT * FROM [user] ...
- JavaScript高级之函数的四种调用形式
主要内容 分析函数的四种调用形式 弄清楚函数中this的意义 明确构造函对象的过程 学会使用上下文调用函数 了解函数的调用过程有助于深入学习与分析JavaScript代码. 本文是JavaScript ...
- PHP从数组中删除元素的四种方法实例
PHP从数组中删除元素的四种方法实例 一.总结 一句话总结:unset(),array_splice(),array_diff(),array_diff_key() 二.PHP从数组中删除元素的四种方 ...
- 下面介绍mysql中模糊查询的四种用法:
下面介绍mysql中模糊查询的四种用法: 1,%:表示任意0个或多个字符.可匹配任意类型和长度的字符,有些情况下若是中文,请使用两个百分号(%%)表示. 比如 SELECT * FROM [user] ...
随机推荐
- 5.21leetcode练习
目录 两数之和 题目 答案 整数反转 题目 思路及答案 回文数 题目 思路及答案 希望每天进步一点点 两数之和 题目 新手司机上路,光荣翻车,没想出来.借了别人的答案,自行领会 答案 整数反转 题目 ...
- centos 7 配置nginx
安装nginx: curl -o nginx.rpm http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0. ...
- CAD绘制一个直径标注(com接口VB语言)
主要用到函数说明: _DMxDrawX::DrawDimDiametric 绘制一个直径标注.详细说明如下: 参数 说明 DOUBLE dChordPointX 在被标注的曲线上的第一个点X值 DOU ...
- CAD处理键盘被按下事件(com接口VB语言)
主要用到函数说明: MxDrawXCustomEvent::KeyDown 键盘被按下,详细说明如下: 参数 说明 LONG lVk 是按钮码,如F8,的值为#define VK_F8 0x77 返回 ...
- 20190625 Oracle优化查询(一)
与其惴惴不安,不如定心应变 前提:我的Oracle服务器是安装在Windows环境中的,没有上到Linux 查看表结构 查询全表 查找空值, 使用“=”是没有结果的,应该使用IS NULL
- 类 Fabric 主机管理程序开发
类 Fabric 主机管理程序开发:1. 运行程序列出主机组或者主机列表2. 选择指定主机或主机组3. 选择让主机或者主机组执行命令或者向其传输文件(上传/下载4. 充分使用多线程或多进程5. 不同主 ...
- 奇怪的print progname ":\n"日志
[root@xxxxxxxx /home/ahao.mah] #tail /var/log/messages -f Feb 10 10:01:01 csaccurate-49-5011 } Feb 1 ...
- 津津的储蓄计划 2004年NOIP全国联赛提高组
题目描述 Description 津津的零花钱一直都是自己管理.每个月的月初妈妈给津津300元钱,津津会预算这个月的花销,并且总能做到实际花销和预算的相同. 为了让津津学习如何储蓄,妈妈提出,津津可以 ...
- py文件控制台执行时,报错:引入的模块不存在
1.描述:该模块在IDE中是可以正确执行的.但是从cmd控制台执行时,报错:该模块引入的其他模块不存在. 2.解决:在该模块的#encoding:utf-8 之后另起一行加如下代码: #encodin ...
- POJ 3061 Subsequence 尺取
Subsequence Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 14698 Accepted: 6205 Desc ...