this的五种绑定方式
  • this的五种绑定规则共有五种

    • 默认绑定(严格/非严格模式)
    • 隐式绑定
    • 显式绑定
    • new绑定
    • 箭头函数绑定
  • 默认绑定(严格/非严格模式)

    • 独立函数调用,可以把默认绑定看作是无法应用其他规则的默认规则,this指向全局对象

    • 严格模式下,不能将全局对象用于默认绑定,this会绑定到undefined。只有函数运行在非严格模式下,默认绑定才能绑定到全局对象,在严格模式下调用函数则不影响默认绑定

    • function(){//运行在严格模式下,this会绑定到undefined"use strict";console.log(this.a);
      }
      var a= 2;
      foo();function foo(){console.log(this.a);
      }
      var a=2;(function(){//严格模式下调用函数则不影响默认绑定"use  strict";foo();//2
      })()
      
    • 隐式绑定

      • 当函数引用由上下文对象时,隐式绑定规则会把函数中的this绑定到这个上下文对象。对象属性引用链上只有一层或者说最后一层在调用中起作用。

      • function foo(){console.log(this.a);
        }
        var obj = {a:2,foo:foo
        };
        obj.foo();//2
        
      • 隐式丢失:被隐式绑定的函数特定情况下会丢失绑定对象,应用默认绑定,把this绑定到全局对象或者undefined上。

      • 虽然bar时obj.foo的一个引用,但是实际上,它引用的是foo函数本身。bar()是一个不带任何修饰的函数调用,应用默认绑定。

      • function foo(){console.log(this.a);
        }
        var obj = {a:2,foo:foo
        };
        var bar = obj.foo;//函数别名
        var a = 'oops,global';//a是全局对象的属性
        bar(); //'oops,global'
        
      • 参数传递就是一种隐式赋值,传入函数时也会被隐式赋值。回调函数丢失this绑定是非常常见的

      • function foo(){console.log(this.a);
        }
        function doFoo(fn){//fn其实引用的是foo fn();  //调用位置
        }
        var obj ={a:2,foo:foo
        };
        var a = 'oops,global';//a是全局对象的属性
        doFoo(obj.foo); //'oops,global'
        
    • 显式绑定

      • 通过call(…)或者apply(…)方法。第一个参数是一个对象,在调用函数时将这个对象绑定到this,因为直接指定this的绑定对象,称之为显式绑定

      • function foo(){console.log(this.a);
        }
        var obj ={a:2
        }
        foo.call(obj);//2  调用foo时强制把foo的this绑定到obj上
        
      • 硬绑定 Function.prototype.binf

    • new绑定

      • 创建/构造一个新对象

      • 这个新对象会被执行[[Prototype]]连接

      • 这个新对象会绑定到函数调用的this

      • 如果函数没有返回其他对象,那么new表达式中的函数会自动返回这个新对象

      • function create(){//创建一个空的对象let obj = new Object()//获得构造函数let Con = [].shift.call(arguments)//链接到原型obj.__ proto __ = Con.prototype  //绑定this,执行构造函数let result = Con.apply(obj,arguments) //确保new出来的是个对象return  typeof result === 'object'?result :obj
        }
        

this的五种绑定方式相关推荐

  1. JavaScript中this的五种绑定方式详解

    1 this的五种绑定方式 1.1 默认绑定 默认绑定是指当函数调用时,没有为其指定对象上下文,此时会将该函数的this绑定到全局对象(window对象).自ES5有了严格模式之后,默认绑定方式又分为 ...

  2. C++中的两种绑定方式(静态绑定、动态绑定)

    两种绑定方式 静态绑定:在编译时刻,根据指针或引用变量的静态类型来决定成员函数属于哪一个类. 动态绑定:在运行时刻,根据指针或引用变量实际指向或引用的对象类型(动态类型)来确定成员函数属于哪一个类. ...

  3. 五种排序方式gif展示【python】

    简述 有五种排序方式. 文章目录 简述 排序 简单排序 冒泡排序 选择排序 归并排序 快速排序 排序 简单排序 import numpy as np import matplotlib.pyplot ...

  4. Silverlight C# 游戏开发:游戏循环体的五种设计方式

    我们在游戏设计和开发中,尤其是引擎开发中,逻辑循环是一个重要组成部分,循环决定了游戏的基础逻辑和运行方式,在不同的开发环境和语言下,对于循环的释义甚至相差甚远,那么我想和大家分享的是在Silverli ...

  5. 谈表达式树的缓存(7):五种缓存方式的总体分析及改进方案

    终于到了这个系列的最后一篇文章了,这个系列的文章本是许多话题的基础,却拖了那么长时间还没有完结.这篇文章主要讨论五种缓存方式各自的优劣,以及他们的性能关键在什么地方,如果要进行改进又有什么可选方案.在 ...

  6. Java防止Xss注入json_XSS的两种攻击方式及五种防御方式

    XSS介绍 跨站脚本攻击指的是自己的网站运行了别的网站里面的代码 攻击原理是原本需要接受数据但是一段脚本放置在了数据中: 该攻击方式能做什么? 获取页面数据 获取Cookies 劫持前端逻辑 发送请求 ...

  7. 后端技术:Java定时任务的五种创建方式

    Quartz表达式生成地址:http://cron.qqe2.com/ 支持生成定时任务表达式和反解析,使用Quartz表达式的定时任务如下 xxl-job springboot 的 @Schedul ...

  8. Jdbc连接mysql的五种连接方式

    一:五种连接方式 直接上码 package com.wyjedu.jdbc;import com.mysql.jdbc.Driver;import java.io.FileInputStream; i ...

  9. java两种绑定方式_Javascript绑定事件的两种方式的区别

    命名函数 function check(){ //code } 匿名函数 window.onload = function(){ //先获取元素对象,再绑定事件,绑定的是匿名函数不可重用 var bt ...

  10. lfu算法实现java_LFU五种实现方式,从简单到复杂

    前言 最近刷力扣题,对于我这种 0 基础来说,真的是脑壳疼啊.这个月我估计都是中等和困难题,没有简单题了. 幸好,力扣上有各种大牛给写题解.看着他们行云流水的代码,真的是羡慕不已.让我印象最深刻的就是 ...

最新文章

  1. 什么样的显卡能支持 4K 分辨率输出?
  2. WAL streaming (max_wal_senders 0) requires wal_level replica or logical
  3. IOS TextField设置大全
  4. 【华为云踩坑】开启了入方向规则的 tcp/80 端口,仍然无法访问
  5. iOS相关,过年回来电脑上的证书都失效了
  6. 途观l怎么使用_官宣!中型SUV质量最新排名出炉:汉兰达失前三,大众途观L上榜!...
  7. 论策谈百度快照回档和后退的原因
  8. VS Code 运行时会弹出Unins000.Exe目标目录创建文件错误
  9. JSZip 的简单介绍
  10. grep命令,sed命令和awk命令
  11. 飞利浦zigbee智能灯泡的软硬件设计
  12. Linux只读文件系统
  13. IDEA 操作指南 - 演出模式,注入语言编辑器,快速切换,快速定位
  14. 使用html创建浮标,自制浮漂其实很简单,不信你来看一看
  15. Artifact storage:war exploded: Error during artifact deployment. See server log for details 之一种解决方法
  16. 计算机室的校规英语翻译,关于校规的英语作文带翻译
  17. 什么是构造函数?构造函数有什么用?
  18. 2022年下半年网络规划设计师考试论文真题
  19. web网页设计期末课程大作业 HTML+CSS+JavaScript仿天猫购物商城设计实例 企业网站制作
  20. 南非世界杯 小组赛 巴西vs葡萄牙

热门文章

  1. 场内场外交易成本_场内基金交易费用更低,但为什么我们都建议大家购买场外基金?...
  2. 《很杂很杂的杂学知识》 学习笔记
  3. 解决无法删除文件夹的情况
  4. Windows兼容性设置图文教程,Windows兼容模式怎么设置?
  5. 100种网站推广方法全集
  6. C#语言实例源码系列-加密解密RAR文件
  7. 1024程序员节日随笔
  8. python和mysql匹配吗_python使用mysql
  9. 全国高校计算机能力挑战赛试题,2019年全国高校计算机能力挑战赛 C语言程序设计决赛(示例代码)...
  10. sift论文_ImageNet一作邓嘉最佳论文,ECCV2020奖项全公布