call和apply

obj.call(thisObj, arg1, arg2, ...);
obj.apply(thisObj, [arg1, arg2, ...]);

两者作用一致,都是把obj(即this)绑定到thisObj,这时候thisObj具备了obj的属性和方法。或者说thisObj『继承』了obj的属性和方法。绑定后会立即执行函数。

唯一区别是apply接受的是数组参数,call接受的是连续参数。

function add(j, k){return j+k;
}function sub(j, k){return j-k;
}

我们在控制台运行:

add(5,3); //8
add.call(sub, 5, 3); //8
add.apply(sub, [5, 3]); //8sub(5, 3); //2
sub.call(add, 5, 3); //2
sub.apply(add, [5, 3]); //2

调用原生对象的方法

示例:

var a = {0:1, 1:"yjc", length: 2}; a.slice(); //TypeError: a.slice is not a functionArray.prototype.slice.call(a);//[1, "yjc"]

对象a类似array,但不具备array的slice等方法。使用call绑定,这时候就可以调用slice方法。

实现继承

通过call和apply,我们可以实现对象继承。示例:

var Parent = function(){this.name = "yjc";this.age = 22;
}var child = {};console.log(child);//Object {} ,空对象Parent.call(child);console.log(child); //Object {name: "yjc", age: 22}

以上实现了对象的继承。

bind的使用

obj.bind(thisObj, arg1, arg2, ...);

把obj绑定到thisObj,这时候thisObj具备了obj的属性和方法。与call和apply不同的是,bind绑定后不会立即执行。

同样是add()和sub():

add.bind(sub, 5, 3); //不再返回8
add.bind(sub, 5, 3)(); //8

如果bind的第一个参数是null或者undefined,等于将this绑定到全局对象。

js笔记——call,apply,bind使用笔记相关推荐

  1. JS高级—call(),apply(),bind()

    文章目录 call() 介绍 语法 特点 返回值 使用(主要应用) apply() 介绍 语法 特点 返回值 使用 bind() 介绍 语法 特点 返回值 使用 call(),apply(),bind ...

  2. 前端-Vue.js从入门到精通基础笔记(理论+实操+知识点速查)

    #[2022.3]尚硅谷Vue.js从入门到精通基础笔记(理论+实操+知识点速查) 前言 本文完全基于 参考资料:加工整理而成,包括其代码,案例,资源等.前置知识是学习尚硅谷的视频教程,本文配合其教程 ...

  3. Node.js b站教学视频汇总笔记(完)CommonJS模块规范、 require、npm、Express(中间件)、MongoDB、MySQL

    文章目录 Node.js b站教学视频汇总笔记(完)CommonJS模块规范. require.npm.Express(中间件).MongoDB.MySQL 1. Node介绍 为什么要学习Node. ...

  4. JavaScript内置一些方法的实现原理--new关键字,call/apply/bind方法--前戏

    new关键字,call/apply/bind方法都和this的绑定有关,在学习之前,首先要理解this. 一起来学习一下this吧 首先.this是一个对象. 对象很好理解,引用类型值,可以实现如th ...

  5. 复习javascript中call,apply,bind的用法

    一直很难理解js中的call apply bind,在w3schools,mdn阅读了,也看了很多相关的文章,今天我来写下我理解的call apply bind 首先创建一个函数 function m ...

  6. JavaScript中call,apply,bind方法的总结。

    why?call,apply,bind干什么的?为什么要学这个? 一般用来指定this的环境,在没有学之前,通常会有这些问题. var a = {user:"追梦子",fn:fun ...

  7. 动力节点的课堂笔记_男孩把历史笔记画成“漫画”,同学成小粉丝,网友:别人家的孩子...

    如果要问上学时比较令人头痛的学科都有哪些,那我想这其中一定少不了历史了,枯燥繁多的事件.容易混淆的时间,总是让同学们感到欲哭无泪,毕竟一个不小心就背错了. 这时有些同学就该说了,那你记笔记不就行了嘛! ...

  8. call,apply,bind,new实现原理

    在实际开发过程中,对于函数封装时,不确定外部是谁调用的,调用函数内部方法时,有可能是window调用这时就会报错,常使用call,apply,bind来绑定this指向. Function.proto ...

  9. call(),apply(),bind()的用法及举例

    通过学习call(),apply(),bind()的用法和区别,我们能更好的理解this及作用域的含义,为后面的编程打下基础. call()的用法: 调用一个函数,使其具有一个指定的this值和分别地 ...

最新文章

  1. AngularJS自定义表单验证
  2. 分布式系统唯一ID生成方案汇总
  3. 开发出高性能的网站系列文章
  4. 关于MSSQL数据存储的问题
  5. 8 MM配置-主数据-定义行业部门和具体行业部门字段选择
  6. intelx79服务器芯片组,Intel X79芯片组下月开始供货
  7. c/c++入门教程 - 1.基础c/c++ - 1.0 Visual Studio 2019安装环境搭建
  8. 文本生成,文本数据增强怎么做?
  9. 关于SpringBoot和Thymeleaf模板中遇到的问题
  10. 【Android笔记】Android引用第三方依赖包library报错解决方法
  11. 电话号码除了数字,应该允许使用文字
  12. python爬取网页代码_python爬虫爬取网页的内容和网页源码不同?
  13. idea快捷键:在上一行插入,在下一行插入
  14. MC34063在扩展后的降压应用
  15. MSN关闭前爆发盗号“高潮” 中国用户面临选择
  16. 服务器上很多iOS临时文件,iOS的临时文件夹位置(iOS temporary folder location)
  17. openSUSE Leap 15.2 和 Tumbleweed KDE Plasma 在ThinkPad X61上安装,自带了有线、无线网卡和显卡驱动
  18. ubuntu IPV6及作为路由分配【笔记】
  19. 【VUE】vue实现登录滑动拼图验证的两种方法,纯前端组件验证以及前后端同时验证
  20. LeetCode:Database 21.统计各专业学生人数

热门文章

  1. python小项目实例流程-python实现的简单RPG游戏流程实例
  2. python写文件读文件-Python 读写文件和file对象的方法(推荐)
  3. python软件怎么用-用Python如何打出你的第一个程序
  4. 基于Yolov4的人群检测,人群距离估计、基于SORT的多目标跟踪及逆透视映射一体的系统Yolov4_DeepSocial
  5. 查看Linux系统架构的命令,查看linux系统是哪种架构:AMD、ARM、x86、x86_64、pcc 或 查看Ubuntu的版本号
  6. 4_Tensorflow框架的使用(20181217-)
  7. spring boot中SpringBootCondition框架
  8. UVa 11307 - Alternative Arborescence(dp)
  9. 关于libnmap 的一些应用
  10. select元素的各种jquery修改获取添加方法