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 相关文章推荐
Using the TextRange Object
Oct 14 Javascript
brook javascript框架介绍
Oct 10 Javascript
基于jQuery的遍历同id元素 并响应事件的代码
Jun 14 Javascript
JavaScript中的some()方法使用详解
Jun 09 Javascript
简述JavaScript中正则表达式的使用方法
Jun 15 Javascript
对于jQuery性能的一些优化建议
Aug 13 Javascript
学习javascript面向对象 javascript实现继承的方式
Jan 04 Javascript
JavaScript的ExtJS框架中数面板TreePanel的使用实例解析
May 21 Javascript
javascript解决小数的加减乘除精度丢失的方案
May 31 Javascript
使用Ajax和Jquery配合数据库实现下拉框的二级联动的示例
Jan 25 jQuery
javascript实现5秒倒计时并跳转功能
Jun 20 Javascript
Vue Element校验validate的实例
Sep 21 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
dedecms中常见问题修改方法总结
2007/03/21 PHP
PHP排序之二维数组的按照字母排序实现代码
2011/08/13 PHP
php计算指定目录下文件占用空间的方法
2015/03/13 PHP
PHP版本的选择5.2.17 5.3.27 5.3.28 5.4 5.5兼容性问题分析
2016/04/04 PHP
从零学jquery之如何使用回调函数
2014/05/16 Javascript
JS实现含有中文字符串的友好截取功能分析
2017/03/13 Javascript
JS+Ajax实现百度智能搜索框
2017/08/04 Javascript
Bootstrap3.3.7导航栏下拉菜单鼠标滑过展开效果
2017/10/31 Javascript
Vue页面骨架屏的实现方法
2018/05/22 Javascript
浅谈 Webpack 如何处理图片(开发、打包、优化)
2019/05/15 Javascript
vue界面发送表情的实现代码
2020/09/11 Javascript
实用的 vue tags 创建缓存导航的过程实现
2020/12/03 Vue.js
Node使用koa2实现一个简单JWT鉴权的方法
2021/01/26 Javascript
[02:19]DOTA2女子战队FOX视频专访:希望更多美眉一起加入
2013/10/15 DOTA
用Python的Django框架编写从Google Adsense中获得报表的应用
2015/04/17 Python
详解Python使用simplejson模块解析JSON的方法
2016/03/24 Python
python批量替换页眉页脚实例代码
2018/01/22 Python
Python cookbook(数据结构与算法)对切片命名清除索引的方法
2018/03/13 Python
numpy中实现ndarray数组返回符合特定条件的索引方法
2018/04/17 Python
Python3数据库操作包pymysql的操作方法
2018/07/16 Python
使用html5+css3来实现slider切换效果告别javascript+css
2013/01/08 HTML / CSS
20世纪40年代连衣裙和复古服装:The Seamstress Of Bloomsbury
2018/07/24 全球购物
美国珠宝店:Helzberg Diamonds
2018/10/24 全球购物
外包公司软件测试工程师
2014/11/01 面试题
经理职责范文
2013/11/08 职场文书
工商学院毕业生自荐信
2013/11/12 职场文书
七匹狼男装广告词
2014/03/21 职场文书
关于环保的建议书
2014/05/12 职场文书
大学奖学金获奖感言
2014/08/15 职场文书
学校党委副书记个人对照检查材料思想汇报
2014/09/28 职场文书
2014年出纳工作总结与计划
2014/12/09 职场文书
中国汉字听写大会观后感
2015/06/02 职场文书
2015年党建工作汇报材料
2015/06/25 职场文书
Python中OpenCV实现简单车牌字符切割
2021/06/11 Python
oracle连接ODBC sqlserver数据源的详细步骤
2021/07/25 Oracle
vue实现在data里引入相对路径
2022/06/05 Vue.js