js笔记——call,apply,bind使用笔记
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使用笔记相关推荐
- JS高级—call(),apply(),bind()
文章目录 call() 介绍 语法 特点 返回值 使用(主要应用) apply() 介绍 语法 特点 返回值 使用 bind() 介绍 语法 特点 返回值 使用 call(),apply(),bind ...
- 前端-Vue.js从入门到精通基础笔记(理论+实操+知识点速查)
#[2022.3]尚硅谷Vue.js从入门到精通基础笔记(理论+实操+知识点速查) 前言 本文完全基于 参考资料:加工整理而成,包括其代码,案例,资源等.前置知识是学习尚硅谷的视频教程,本文配合其教程 ...
- Node.js b站教学视频汇总笔记(完)CommonJS模块规范、 require、npm、Express(中间件)、MongoDB、MySQL
文章目录 Node.js b站教学视频汇总笔记(完)CommonJS模块规范. require.npm.Express(中间件).MongoDB.MySQL 1. Node介绍 为什么要学习Node. ...
- JavaScript内置一些方法的实现原理--new关键字,call/apply/bind方法--前戏
new关键字,call/apply/bind方法都和this的绑定有关,在学习之前,首先要理解this. 一起来学习一下this吧 首先.this是一个对象. 对象很好理解,引用类型值,可以实现如th ...
- 复习javascript中call,apply,bind的用法
一直很难理解js中的call apply bind,在w3schools,mdn阅读了,也看了很多相关的文章,今天我来写下我理解的call apply bind 首先创建一个函数 function m ...
- JavaScript中call,apply,bind方法的总结。
why?call,apply,bind干什么的?为什么要学这个? 一般用来指定this的环境,在没有学之前,通常会有这些问题. var a = {user:"追梦子",fn:fun ...
- 动力节点的课堂笔记_男孩把历史笔记画成“漫画”,同学成小粉丝,网友:别人家的孩子...
如果要问上学时比较令人头痛的学科都有哪些,那我想这其中一定少不了历史了,枯燥繁多的事件.容易混淆的时间,总是让同学们感到欲哭无泪,毕竟一个不小心就背错了. 这时有些同学就该说了,那你记笔记不就行了嘛! ...
- call,apply,bind,new实现原理
在实际开发过程中,对于函数封装时,不确定外部是谁调用的,调用函数内部方法时,有可能是window调用这时就会报错,常使用call,apply,bind来绑定this指向. Function.proto ...
- call(),apply(),bind()的用法及举例
通过学习call(),apply(),bind()的用法和区别,我们能更好的理解this及作用域的含义,为后面的编程打下基础. call()的用法: 调用一个函数,使其具有一个指定的this值和分别地 ...
最新文章
- AngularJS自定义表单验证
- 分布式系统唯一ID生成方案汇总
- 开发出高性能的网站系列文章
- 关于MSSQL数据存储的问题
- 8 MM配置-主数据-定义行业部门和具体行业部门字段选择
- intelx79服务器芯片组,Intel X79芯片组下月开始供货
- c/c++入门教程 - 1.基础c/c++ - 1.0 Visual Studio 2019安装环境搭建
- 文本生成,文本数据增强怎么做?
- 关于SpringBoot和Thymeleaf模板中遇到的问题
- 【Android笔记】Android引用第三方依赖包library报错解决方法
- 电话号码除了数字,应该允许使用文字
- python爬取网页代码_python爬虫爬取网页的内容和网页源码不同?
- idea快捷键:在上一行插入,在下一行插入
- MC34063在扩展后的降压应用
- MSN关闭前爆发盗号“高潮” 中国用户面临选择
- 服务器上很多iOS临时文件,iOS的临时文件夹位置(iOS temporary folder location)
- openSUSE Leap 15.2 和 Tumbleweed KDE Plasma 在ThinkPad X61上安装,自带了有线、无线网卡和显卡驱动
- ubuntu IPV6及作为路由分配【笔记】
- 【VUE】vue实现登录滑动拼图验证的两种方法,纯前端组件验证以及前后端同时验证
- LeetCode:Database 21.统计各专业学生人数
热门文章
- python小项目实例流程-python实现的简单RPG游戏流程实例
- python写文件读文件-Python 读写文件和file对象的方法(推荐)
- python软件怎么用-用Python如何打出你的第一个程序
- 基于Yolov4的人群检测,人群距离估计、基于SORT的多目标跟踪及逆透视映射一体的系统Yolov4_DeepSocial
- 查看Linux系统架构的命令,查看linux系统是哪种架构:AMD、ARM、x86、x86_64、pcc 或 查看Ubuntu的版本号
- 4_Tensorflow框架的使用(20181217-)
- spring boot中SpringBootCondition框架
- UVa 11307 - Alternative Arborescence(dp)
- 关于libnmap 的一些应用
- select元素的各种jquery修改获取添加方法