call、apply、bind笔记

简介: call、apply、bind笔记

call、apply、bind的基本概念



call是一个方法,是函数的方法

call可以调用函数,改变函数中this的指向

  function fun(){
    console.log("hello world")
   };
  fun.call();


call挨个传参,不需要使用数组

apply需要用数组传参

bind不会调用函数,只能作为返回值返回一个函数

  let dog = {
      name: "旺财",
      sayName(){
         console.log("我是"+this.name)
      },
      eat(food1,food2){
          console.log("我喜欢吃"+food1+food2)
      }
  }
  let cat = {
      name: "喵喵"
  }
  dog.sayName();//我是旺财
  dog.sayName.call(cat);//我是喵喵
  dog.eat.call(cat);//我喜欢吃undefinedundefined,因为只改变了对象,没有传参
  dog.eat.call(cat,"鱼","肉");//假如传两个参数的话,挨个传
  dog.eat.apply(cat,["鱼","肉"])//apply需要用数组传参
  let fun2 = dog.eat.bind(cat,"鱼","肉")//bind不会调用函数,只能作为返回值返回一个函数
  fun2();//我喜欢吃鱼肉


call、apply、bind的实际应用



继承:子类可以使用父类的方法

call的好处,实现多重继承

 function Animal(){
        //this指向小cat
        this.eat = function(){
          console.log("吃东西")
     }
 }
 function Bird(){
         this.fly = function(){
             console.log("我会飞")
         }
 }
 function Cat(){
     //调用animal函数,这里的this指向小cat,
     Animal.call(this);
     //验证this指向的是小cat
     this.sayName = function(){
         console.log("输出自己的名字")
     }
     //多重继承,Bird里面的this指向小cat
     Bird.call(this);
 }
 let cat = new Cat();//创建对象,this就指向创建的cat
 cat.eat(); //吃东西
 cat.sayName(); //输出自己的名字
 cat.fly(); //我会飞


目录
相关文章
|
关系型数据库 MySQL Java
SSM整合流程(整合配置、功能模块开发、接口测试)
SSM整合流程(整合配置、功能模块开发、接口测试)
299 0
|
9月前
|
数据可视化 前端开发 测试技术
接口测试新选择:Postman替代方案全解析
在软件开发中,接口测试工具至关重要。Postman长期占据主导地位,但随着国产工具的崛起,越来越多开发者转向更适合中国市场的替代方案——Apifox。它不仅支持中英文切换、完全免费不限人数,还具备强大的可视化操作、自动生成文档和API调试功能,极大简化了开发流程。
|
12月前
|
前端开发 开发者
CSS预处理器Less、Scss
【10月更文挑战第3天】
218 59
|
6月前
|
机器学习/深度学习 人工智能 自然语言处理
人工智能与ai有什么区别
本文探讨了“人工智能”与“AI”在语义、使用场景及技术侧重点上的差异,强调理解这些差异对把握技术发展的重要性。文中分析了两者的学术与通俗应用场景,并结合生成式人工智能认证项目(由培生于2024年推出),说明如何通过理论与实践结合,规避AI局限性,推动技术创新。最终呼吁在概念辨析中探索人工智能的未来潜力。
|
10月前
|
Kubernetes 网络协议 应用服务中间件
Kubernetes Ingress:灵活的集群外部网络访问的利器
《Kubernetes Ingress:集群外部访问的利器-打造灵活的集群网络》介绍了如何通过Ingress实现Kubernetes集群的外部访问。前提条件是已拥有Kubernetes集群并安装了kubectl工具。文章详细讲解了Ingress的基本组成(Ingress Controller和资源对象),选择合适的版本,以及具体的安装步骤,如下载配置文件、部署Nginx Ingress Controller等。此外,还提供了常见问题的解决方案,例如镜像下载失败的应对措施。最后,通过部署示例应用展示了Ingress的实际使用方法。
300 2
|
11月前
|
监控 API 微服务
后端技术演进:从单体架构到微服务的转变
随着互联网应用的快速增长和用户需求的不断演化,传统单体架构已难以满足现代软件开发的需求。本文深入探讨了后端技术在面对复杂系统挑战时的演进路径,重点分析了从单体架构向微服务架构转变的过程、原因及优势。通过对比分析,揭示了微服务架构如何提高系统的可扩展性、灵活性和维护效率,同时指出了实施微服务时面临的挑战和最佳实践。
215 7
|
运维 监控 Shell
掌握100个开箱即用的Shell脚本~(附PDF)
Shell脚本是实现Linux系统管理及自动化运维所必备的重要工具。许多其它岗位的小伙伴也经常使用Shell脚本来实现某项需求。 今天分享《100个shell脚本案例》,共有55页,支持文字搜索定位,代码清晰可复制。
|
11月前
|
运维 关系型数据库 MySQL
安装MySQL8数据库
本文介绍了MySQL的不同版本及其特点,并详细描述了如何通过Yum源安装MySQL 8.4社区版,包括配置Yum源、安装MySQL、启动服务、设置开机自启动、修改root用户密码以及设置远程登录等步骤。最后还提供了测试连接的方法。适用于初学者和运维人员。
754 0
|
XML 存储 前端开发
【前端】XML和HTML的区别详解
【前端】XML和HTML的区别详解
294 5
|
域名解析 存储 缓存
UDP编程-DNS解析器的分析与实现(C语言)
域名系统(英文:Domain Name System,缩写:DNS)的作用是将人类可读的域名 (如,www.example.com) 转换为机器可读的 IP 地址 (如,192.0.2.44)。DNS是一个将域名和IP地址相互映射的一个分布式数据库,DNS使用的端口是53。对于每一级域名长度的限制是 63 个字符,域名总长度 则不能超过 253 个字符。
282 0