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 相关文章推荐
获取JavaScript用户自定义类的类名称的代码
Mar 08 Javascript
javascript 模拟JQuery的Ready方法实现并出现的问题
Dec 06 Javascript
Ext对基本类型的扩展 ext,extjs,format
Dec 25 Javascript
js导航菜单(自写)简单大方
Mar 28 Javascript
基于IE下ul li 互相嵌套时的bug,排查,解决过程以及心得介绍
May 07 Javascript
BootStrap初学者对弹出框和进度条的使用感觉
Jun 27 Javascript
微信小程序 canvas API详解及实例代码
Oct 08 Javascript
JS添加或修改控件的样式(Class)实现方法
Oct 15 Javascript
Require.js的基本用法详解
Jul 03 Javascript
element-ui表格列金额显示两位小数的方法
Aug 24 Javascript
详解Node.js中path模块的resolve()和join()方法的区别
Oct 29 Javascript
vue动态路由:路由参数改变,视图不更新问题的解决
Nov 05 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
虫族 ZERG 概述
2020/03/14 星际争霸
解析用PHP读写音频文件信息的详解(支持WMA和MP3)
2013/05/10 PHP
解析如何通过PHP函数获取当前运行的环境 来进行判断执行逻辑(小技巧)
2013/06/25 PHP
php setcookie(name, value, expires, path, domain, secure) 参数详解
2013/06/28 PHP
PHP+Mysql基于事务处理实现转账功能的方法
2015/07/08 PHP
php 修改上传文件大小限制实例详解
2016/10/23 PHP
PHP CURL使用详解
2019/03/21 PHP
javascript+xml实现简单图片轮换(只支持IE)
2012/12/23 Javascript
如何使用Jquery获取Form表单中被选中的radio值
2013/08/09 Javascript
jquery 实现密码框的显示与隐藏示例代码
2013/09/18 Javascript
JS与C#编码解码
2013/12/03 Javascript
JavaScript实现网页截图功能
2014/10/16 Javascript
jquery渐隐渐显的图片幻灯闪烁切换实现方法
2015/02/26 Javascript
jquery+CSS实现的水平布局多级网页菜单效果
2015/08/24 Javascript
AngularJS directive返回对象属性详解
2016/03/28 Javascript
jQuery Easyui DataGrid点击某个单元格即进入编辑状态焦点移开后保存数据
2016/08/15 Javascript
原生js实现jquery函数animate()动画效果的简单实例
2016/08/21 Javascript
jQuery图片瀑布流的简单实现代码
2017/03/15 Javascript
JavaScript对象引用与赋值实例详解
2017/03/15 Javascript
微信JSSDK调用微信扫一扫功能的方法
2017/07/25 Javascript
Vue.js 的移动端组件库mint-ui实现无限滚动加载更多的方法
2017/12/23 Javascript
React组件重构之嵌套+继承及高阶组件详解
2018/07/19 Javascript
django简单的前后端分离的数据传输实例 axios
2020/05/18 Javascript
webpack安装配置与常见使用过程详解(结合vue)
2020/06/01 Javascript
vue集成openlayers加载geojson并实现点击弹窗教程
2020/09/24 Javascript
[05:31]DOTA2上海特级锦标赛主赛事第三日RECAP
2016/03/05 DOTA
Python实现简单的代理服务器
2015/07/25 Python
python 3.5实现检测路由器流量并写入txt的方法实例
2017/12/17 Python
在Python中字典根据多项规则排序的方法
2019/01/21 Python
python matplotlib库绘制条形图练习题
2019/08/10 Python
Kmeans均值聚类算法原理以及Python如何实现
2020/09/26 Python
关于Python3的import问题(pycharm可以运行命令行import错误)
2020/11/18 Python
HTML5 Plus 实现手机APP拍照或相册选择图片上传功能
2016/07/13 HTML / CSS
优秀女职工事迹材料
2014/02/06 职场文书
详解gantt甘特图可拖拽、编辑(vue、react都可用 highcharts)
2021/11/27 Vue.js
MySQL实现字段分割一行转多行的示例代码
2022/07/07 MySQL