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 页面 Mask实现代码
Jan 09 Javascript
JavaScript设计模式之代理模式介绍
Dec 28 Javascript
Jquery全屏相册插件zoomvisualizer具有调节放大与缩小功能
Nov 02 Javascript
基于Jquery easyui 选中特定的tab
Nov 17 Javascript
jquery zTree异步加载简单实例讲解
Feb 25 Javascript
微信小程序实现带刻度尺滑块功能
Mar 29 Javascript
Three.js如何实现雾化效果示例代码
Sep 27 Javascript
vue select组件的使用与禁用实现代码
Apr 10 Javascript
详解Vue webapp项目通过HBulider打包原生APP(vue+webpack+HBulider)
Feb 02 Javascript
JS前后端实现身份证号验证代码解析
Jul 23 Javascript
JQuery基于FormData异步提交数据文件
Sep 01 jQuery
JavaScript基于SVG的图片切换效果实例代码
Dec 15 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
神族 PROTOSS 概述
2020/03/14 星际争霸
PHP数组与字符串互相转换实例
2020/05/05 PHP
2007/12/23更新创意无限,简单实用(javascript log)
2007/12/24 Javascript
js兼容标准的表格变色效果
2008/06/28 Javascript
基于jquery的当鼠标滚轮到最底端继续加载新数据思路分享(多用于微博、空间、论坛 )
2011/10/10 Javascript
JavaScript面向对象(极简主义法minimalist approach)
2012/07/17 Javascript
javascript确认框的三种使用方法
2013/12/17 Javascript
JavaScript转换二进制编码为ASCII码的方法
2015/04/16 Javascript
JS+DIV实现鼠标划过切换层效果的方法
2015/05/25 Javascript
JSON相关知识汇总
2015/07/03 Javascript
全面详细的jQuery常见开发技巧手册
2016/02/21 Javascript
JavaScript实现图片轮播组件代码示例
2016/11/22 Javascript
深入理解JavaScript 参数按值传递
2017/05/24 Javascript
解决webpack多页面内存溢出的方法示例
2019/10/08 Javascript
vue滚动插件better-scroll使用详解
2019/10/18 Javascript
Python多线程编程(五):死锁的形成
2015/04/05 Python
python实现类的静态变量用法实例
2015/05/08 Python
浅谈Python中的闭包
2015/07/08 Python
Python多继承顺序实例分析
2018/05/26 Python
Python中栈、队列与优先级队列的实现方法
2019/06/30 Python
Python企业编码生成系统之主程序模块设计详解
2019/07/26 Python
python matplotlib中的subplot函数使用详解
2020/01/19 Python
详解python itertools功能
2020/02/07 Python
python 爬虫 实现增量去重和定时爬取实例
2020/02/28 Python
基于python实现FTP文件上传与下载操作(ftp&sftp协议)
2020/04/01 Python
Python 在函数上添加包装器
2020/07/28 Python
如何配置、使用和清除Smarty缓存
2015/12/23 面试题
机械专业个人求职自荐信格式
2013/09/21 职场文书
销售总监岗位职责
2014/01/04 职场文书
中层竞聘演讲稿
2014/01/09 职场文书
2014年三八妇女节活动方案
2014/02/28 职场文书
个人自我鉴定总结
2014/03/25 职场文书
美化环境标语
2014/06/20 职场文书
手术室护士节演讲稿
2014/08/27 职场文书
实用干货:敬酒词大全,帮你应付各种场合
2019/11/21 职场文书
使用feign服务调用添加Header参数
2021/06/23 Java/Android