Function.prototype.apply()与Function.prototype.call()小结


Posted in Javascript onApril 27, 2016

老是忘掉这两个东东的用下,写下来做个记录吧。
他们作用是一模一样的,只是传入的参数不一样

apply

apply接受两个参数,第一个制定了函数体内this对象的指向,第二个参数为一个带下标的集合(可遍历对象),apply方法把这个集合中的元素作为参数传递给被调用的函数:

var func = function(a, c, c){
  alert([a,b,c]); //[1,2,3]
}
func.apply(null, [1,2,3]);

call

call传入的参数不固定,和apply相同的是,第一个参数也是代表函数体内的this指向,第二个参数开始往后,每个参数被依次传入函数:

var func = function(a, b, c){
  alert([a,b,c]); //[1,2,3]
}
func.call(null, 1,2,3);

call是aplly的一颗语法糖。如果第一个参数为null,函数体内的this指向宿主对象,在浏览器中是window。

call和apply的用途

1.改变this指向

上面的例子就是啦

2.Function.prototype.bind

模拟Function.prototype.bind

Function.prototype.bind = function(context){
  var self = this;
  return function(){
    return self.apply(context, arguments);
  }
};

var obj = {
  name: 'cxs'
};

var func = function(){
  alert(this.name); //cxs
}.bind(obj);

fun();
Javascript 相关文章推荐
js控制表单奇偶行样式的简单方法
Jul 31 Javascript
javascript 获取HTML DOM父、子、临近节点
Jun 16 Javascript
js随机生成网页背景颜色的方法
Feb 26 Javascript
js实现鼠标划过给div加透明度的方法
May 25 Javascript
js实现的简洁网页滑动tab菜单效果代码
Aug 24 Javascript
JavaScript学习小结(7)之JS RegExp
Nov 29 Javascript
JavaScript生成.xls文件的代码
Dec 22 Javascript
Vue.use源码学习小结
Jun 20 Javascript
微信小程序http连接访问解决方案的示例
Nov 05 Javascript
深入理解使用Vue实现Context-Menu的思考与总结
Mar 09 Javascript
详解vue v-model
Aug 31 Javascript
基于elementUI竖向表格、和并列的案例
Oct 26 Javascript
常用原生JS兼容性写法汇总
Apr 27 #Javascript
JS组件Bootstrap实现弹出框效果代码
Apr 26 #Javascript
跨域资源共享 CORS 详解
Apr 26 #Javascript
Bootstrap滚动监听(Scrollspy)插件详解
Apr 26 #Javascript
JS组件Bootstrap实现下拉菜单效果代码
Apr 26 #Javascript
基于Jquery插件实现跨域异步上传文件功能
Apr 26 #Javascript
Bootstrap每天必学之模态框(Modal)插件
Apr 26 #Javascript
You might like
2020年4月放送!《Princess Connect Re:Dive》制作组 & 角色声优公开!
2020/03/06 日漫
php zend 相对路径问题
2009/01/12 PHP
PHP中include/require/include_once/require_once使用心得
2016/08/28 PHP
php从数据库读取数据,并以json格式返回数据的方法
2018/08/21 PHP
ko knockoutjs动态属性绑定技巧应用
2012/11/14 Javascript
JQ获取动态加载的图片大小的正确方法分享
2013/11/08 Javascript
jquery实现手机发送验证码的倒计时代码
2014/02/12 Javascript
Nodejs全栈框架StrongLoop推荐
2014/11/09 NodeJs
node.js超时timeout详解
2014/11/26 Javascript
js实现select跳转菜单新窗口效果代码分享(超简单)
2015/08/21 Javascript
javascript经典特效分享 手风琴、轮播图、图片滑动
2016/09/14 Javascript
JS简单实现表格排序功能示例
2016/12/20 Javascript
js获取当前页的URL与window.location.href简单方法
2017/02/13 Javascript
Node.js微信 access_token ( jsapi_ticket ) 存取与刷新的示例
2017/09/30 Javascript
js设置随机切换背景图片的简单实例
2017/11/12 Javascript
JS设计模式之访问者模式定义与用法分析
2018/02/05 Javascript
jQuery中将json数据显示到页面表格的方法
2018/05/27 jQuery
vue操作下拉选择器获取选择的数据的id方法
2018/08/24 Javascript
JS浏览器BOM常见操作实例详解
2020/04/27 Javascript
vuex分模块后,实现获取state的值
2020/07/26 Javascript
JS JQuery获取data-*属性值方法解析
2020/09/01 jQuery
[52:52]完美世界DOTA2联赛PWL S3 LBZS vs access 第一场 12.10
2020/12/13 DOTA
Python中实现的RC4算法
2015/02/14 Python
import的本质解析
2017/10/30 Python
Python子类继承父类构造函数详解
2019/02/19 Python
python中count函数简单用法
2020/01/05 Python
如何快速一次性卸载所有python包(第三方库)呢
2020/10/20 Python
前端H5 Video常见使用场景简介
2020/08/21 HTML / CSS
缓解脚、腿和背部疼痛:Z-CoiL鞋
2019/03/12 全球购物
德国最大的服装、鞋子和配件在线商店之一:Outfits24
2019/07/23 全球购物
指针和引用有什么区别
2013/01/13 面试题
旅游管理专业个人求职信范文
2013/12/24 职场文书
设计专业自荐信
2014/06/19 职场文书
大学毕业生管理学求职信
2014/09/01 职场文书
交流会主持词
2015/07/02 职场文书
MySQL表字段时间设置默认值
2021/05/13 MySQL