js中的apply()、call() 和 bind()
apply()
和 call()
,这两个方法的用途都是在特定的作用域中调用函数,等同于设置函数体内部 this
指向的对象,也就是改变函数运行时的作用域。
apply()
接收两个参数,第一个参数是给绑定 this
的值,第二个参数是参数数组,call()
和apply()
的作用相同,接收的第一个参数也相同,区别在于之后传入参数的方式不同,看个例子:
var o = {color: 'blue'
}
var color = "red";function sayColor(num) {console.log(this.color + '-' + num);
};
sayColor(1); //red-1
sayColor.apply(o,[2]); //blue-2
sayColor.call(o,3); //blue-3
可以看出,apply()
和call()
作用相同,传入参数也类似,区别只是apply()
传入的是个数组,call()
参数必须逐个列举出来传入。
再说bind()
,传参方式和call()
比较相似,bind()
第一个参数也是绑定this
的值,后面的参数也是需要逐个列举出来传入,不同的是,bind()
不会立即执行,bind()
会生成一个新的函数,之后就可以随时调用。说的不明白,看代码:
var o = {color: 'blue'
}
var color = "red";function sayColor(num) {console.log(this.color + '-' + num);
};
var color = sayColor.bind(o,4);
color(); //blue-4
bind()
并不支持IE6~8,若想要低版本的IE支持bind()
,需要通过Function
的prototype
进行扩展,自定义一个bind()
方法。像这样:
if (! function() {}.bind) {Function.prototype.bind = function(context) {var self = this,args = Array.prototype.slice.call(arguments);return function() {return self.apply(context, args.slice(1));}};
}
转载于:https://www.cnblogs.com/yangrenmu/p/7085859.html
js中的apply()、call() 和 bind()相关推荐
- 浅谈JavaScript中的apply,call和bind
apply,call,bine 这三兄弟经常让初学者感到疑惑.前两天准备面试时特地做了个比较,其实理解起来也不会太难. apply MDN上的定义: The apply() method calls ...
- 前端学习(3270):js中this的使用call bind
- 理解js中的this指向以及call,apply,bind方法
<script> function a(){var user = "追梦子";console.log(this.user); //undefinedconsole.lo ...
- js中函数对象的方法,原型方法apply、call、bind、toString、toLocaleString、valueOf
全栈工程师开发手册 (作者:栾鹏) js系列教程4-函数.函数参数教程全解 js中函数也是一种对象,因此有自己的原型对象,可以作为其他对象的属性,也可以作为其他函数的参数. 函数方法 [apply() ...
- JS中bind、call和apply的作用以及在TS装饰器中的用法
目录 1,前言 1,call 1.1,例子 1.2,直接调用 1.3,将this指向另一个对象 1.4,传递参数 2,apply 2.1,例子 2.2,直接调用 2.3,将this指向另一个对象 2. ...
- JS中的call、apply、bind方法详解
bind 是返回对应函数,便于稍后调用:apply .call 则是立即调用 . apply.call 在 javascript 中,call 和 apply 都是为了改变某个函数运行时的上下文(co ...
- 复习javascript中call,apply,bind的用法
一直很难理解js中的call apply bind,在w3schools,mdn阅读了,也看了很多相关的文章,今天我来写下我理解的call apply bind 首先创建一个函数 function m ...
- js中自己实现bind函数的方式
前言 最近由于工作比较忙,好久都没时间静下心来研究一些东西了.今天在研究 call 和 apply 的区别的时候,看到 github 上面的一篇文章,看完以后,感觉启发很大. 文章链接为 https: ...
- 如何在JavaScript中使用apply(?),call(?)和bind(➰)方法
by Ashay Mandwarya ?️?? 由Ashay Mandwarya提供吗? 如何在JavaScript中使用apply(?),call(?)和bind(➰)方法 (How to use ...
最新文章
- protobuf + maven 爬坑记
- 中one_十月中大型SUV销量排行:途昂稳坐第一,理想ONE晋升亚军
- TF之VGG系列:利用预先编制好的脚本data_convert .py文件将图片格式转换为tfrecord 格式
- Java8 Striped64 和 LongAdder
- 《南溪的目标检测学习笔记》——COCO数据集的学习笔记
- 大厂不一定要进,算法必须要学!精选算法文章89篇
- 5G:无人驾驶的“超级英雄”路
- 712. Minimum ASCII Delete Sum for Two Strings
- 我们都被监控了?揭秘全球电信网络7号信令(SS7)漏洞
- unity3——Humanoid与generic的区别
- sqlite3驱动文件
- windows7蓝牙怎么打开_英特尔升级Wi-Fi 和蓝牙驱动,Win10 更新5月版稳了
- 根据两点经纬度计算方位角
- 【细小碎的oi小知识点总结贴】不定时更新(显然也没人看qwq)
- android怎么删除插件,Android手机如何添加删除桌面图标和插件
- 仿原生安卓文件管理器
- 软件导出excel时提示没有注册类
- GitHub疯传,这个Leetcode刷题手册到底有多流弊?
- Vue 项目路由出现 message: “Navigating to current location (XXX) is not allowed“的问题
- 小白Java学习之路(abstract抽象类,final,接口,equals)