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 相关文章推荐
JQuery CSS样式控制 学习笔记
Jul 23 Javascript
firefox事件处理之自动查找event的函数(用于onclick=foo())
Aug 05 Javascript
jquery插件珍藏(图片局部放大/信息提示框)
Jan 08 Javascript
商城常用滚动的焦点图效果代码简单实用
Mar 28 Javascript
js创建jsonArray传输至后台及后台全面解析
Apr 11 Javascript
jquery无法为动态生成的元素添加点击事件的解决方法(推荐)
Dec 26 Javascript
微信小程序支付及退款流程详解
Nov 30 Javascript
vue全局组件与局部组件使用方法详解
Mar 29 Javascript
Vue弹出菜单功能的实现代码
Sep 12 Javascript
微信小程序实现商城倒计时
Nov 01 Javascript
JS Math对象与Math方法实例小结
Jul 05 Javascript
JavaScript中的类型检查
Feb 03 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
PHP 字符串加密函数(在指定时间内加密还原字符串,超时无法还原)
2010/04/28 PHP
JQuery 学习笔记 选择器之四
2009/07/23 Javascript
javascript两种function的定义介绍及区别说明
2013/05/02 Javascript
按钮接受回车事件的三种实现方法
2014/06/06 Javascript
JS动态遍历json中所有键值对的方法(不知道属性名的情况)
2016/12/28 Javascript
简单的渐变轮播插件
2017/01/12 Javascript
简单实现js菜单栏切换效果
2017/03/04 Javascript
jQuery Chosen通用初始化
2017/03/07 Javascript
Three.js获取鼠标点击的三维坐标示例代码
2017/03/24 Javascript
Vue.js仿Metronic高级表格(二)数据渲染
2017/04/19 Javascript
Nodejs--post的公式详解
2017/04/29 NodeJs
Angularjs的$http异步删除数据详解及实例
2017/07/27 Javascript
不使用JavaScript实现菜单的打开和关闭效果demo
2018/05/01 Javascript
详解iframe跨域的几种常用方法(小结)
2019/04/29 Javascript
react组件基本用法示例小结
2020/04/27 Javascript
vue各种事件监听实例(小结)
2020/06/24 Javascript
Python中使用logging模块打印log日志详解
2015/04/05 Python
python用Pygal如何生成漂亮的SVG图像详解
2017/02/10 Python
Python基于辗转相除法求解最大公约数的方法示例
2018/04/04 Python
python lxml中etree的简单应用
2019/05/10 Python
深入了解Python枚举类型的相关知识
2019/07/09 Python
Python 画出来六维图
2019/07/26 Python
python中从for循环延申到推导式的具体使用
2019/11/29 Python
python实现猜拳游戏项目
2020/11/30 Python
爱尔兰电子产品购物网站:Komplett.ie
2018/04/04 全球购物
存储过程和sql语句的优缺点
2014/07/02 面试题
小学后勤管理制度
2014/01/14 职场文书
双十佳事迹材料
2014/01/29 职场文书
小学三年级数学教学反思
2014/01/31 职场文书
信息管理专业自荐书
2014/06/05 职场文书
报考公务员诚信承诺书
2014/08/29 职场文书
焦裕禄纪念馆观后感
2015/06/09 职场文书
创业的9条正确思考方式
2019/08/26 职场文书
jquery插件实现悬浮的菜单
2021/04/24 jQuery
前端使用svg图片改色实现示例
2022/07/23 HTML / CSS
Java使用HttpClient实现文件下载
2022/08/14 Java/Android