call()、apply()、bind()
1.均可以改变函数的执行上下文,也就是this值;
2.call() apply()
function apply(num1, num2){
return sum.apply(this, [num1,num2]);
}
function call(num1, num2){
return sum.call(this, num1, num2);
}
参数的第一部分:执行上下文,就是this;
参数的第二部分:需要传递的参数,可以是一个,也可以为多个;
apply第二部分需要的是一个数组作为参数;
call第二部分的参数是数组里面的元素,需要一个一个传,用逗号隔开;
但是第二部分均可以传arguments;
如果call和apply的第一个参数写的是null,那么this指向的是window对象。
var a = {
user:"zhangsan",
fn:function(){
console.log(this);//Window {speechSynthesis: SpeechSynthesis, caches: CacheStorage, localStorage: Storage, sessionStorage: Storage, webkitStorageInfo: DeprecatedStorageInfo…}
}
}
var b = a.fn;
b.apply(null);
3.bind()
属于es5中的方法,也是用来实现上下文绑定,但是它是新创建一个函数,称为绑定函数,然后把它的上下文绑定到bind()括号中的参数上,然后将它返回;
4.bind()与call()、apply()最大的区别:bind()不会立即调用,需要加上()来执行,其他两个会直接调用;
bind方法可以让对应的函数想什么时候调就什么时候调用,并且可以将参数在执行的时候添加,视情况而定。
1.第一个参数均是this要指向的对象;
2.都是用来改变函数this对象的指向;
3.都可以继续传递参数.
看代码:
var person = {
name: 'zhangsan',
sex: '男',
say: function(){
console.log(this.name + ',' + this.sex);
}
}
var other = {
name: 'lili',
sex: '女',
}
person.say.call(other);//lili,女
person.say.apply(other);//lili,女
person.say.bind(other)();//lili,女
带参数形式:
var person = {
name: 'zhangsan',
sex: '男',
say: function(school,grade){
console.log(this.name + ',' + this.sex + ';' + school + grade);
}
}
var other = {
name: 'lili',
sex: '女',
}
person.say.call(other,'北京大学','2');//lili,女;北京大学2
person.say.apply(other,['清华大学','3']);//lili,女;北京大学3
person.say.bind(other,'南开大学',4)();//lili,女;北京大学4
call()、apply()、bind()的更多相关文章
- JS中call、apply、bind使用指南,带部分原理。
为什么需要这些?主要是因为this,来看看this干的好事. box.onclick = function(){ function fn(){ alert(this); } fn();}; 我们原本以 ...
- Javascript中call、apply、bind函数
javascript在函数创建的时候除了自己定义的参数外还会自动新增this和arguments两个参数 javascript中函数也是对象,call.apply.bind函数就是函数中的三个函数,这 ...
- 图解call、apply、bind的异同及各种实战应用演示
一.图解call.apply.bind的异同 JavaScript中函数可以通过3种方法改变自己的this指向,它们是call.apply.bind.它们3个非常相似,但是也有区别.下面表格可以很直观 ...
- JavaScript中call、apply、bind、slice的使用
1.参考资料 http://www.cnblogs.com/coco1s/p/4833199.html 2.归结如下 apply . call .bind 三者都是用来改变函数的this对象的指向 ...
- JS中的call、apply、bind方法
JS中的call.apply.bind方法 一.call()和apply()方法 1.方法定义 call方法: 语法:call([thisObj[,arg1[, arg2[, [,.argN]]] ...
- js中call、apply、bind那些事
前言 回想起之前的一些面试,几乎每次都会问到一个js中关于call.apply.bind的问题,比如- 怎么利用call.apply来求一个数组中最大或者最小值 如何利用call.apply来做继承 ...
- 前端总结·基础篇·JS(三)arguments、callee、call、apply、bind及函数封装和构造函数
前端总结系列 前端总结·基础篇·CSS(一)布局 前端总结·基础篇·CSS(二)视觉 前端总结·基础篇·CSS(三)补充 前端总结·基础篇·JS(一)原型.原型链.构造函数和字符串(String) 前 ...
- 数组去重,call、apply、bind之间的区别,this用法总结
一.数组去重,直接写到Array原型链上. //该方法只能去除相同的数字 不会去判断24和'24'是不同的 所有数字和字符串数字是相同是重复的 Array.prototype.redup=functi ...
- javascript中call()、apply()、bind()的用法终于理解
其实是一个很简单的东西,认真看十分钟就从一脸懵B 到完全 理解! 先看明白下面: 例1 obj.objAge; //17 obj.myFun() //小张年龄undefined 例2 shows( ...
- JS 中的this指向问题和call、apply、bind的区别
this的指向问题 一般情况下this对象指向调用函数的对象,全局环境中执行函数this对象指向window. function a(){ console.log(this); //输出函数a中的th ...
随机推荐
- hashMap 临界值初步理解
import java.util.*; public class Bs { //Integer.highestOneBit((number - 1) << 1)分解 public stat ...
- RAP接口管理系统import进eclipse进行二次开发
接口管理工具用了RAP,又是巴巴队伍的东西,开源的,需要进行二次开发方可被使用. 前几个月的时候鼓捣了一阵子,下来一片红,然后就没管它了.最近又捡起.直接git导入项目即可. 安装git插件,网上很多 ...
- 推荐一个不错的关于Excel数据统计分析的公众号
- SpagoBI 教程 Lesson 1:Introduction and Installation
SapgoBI Lesson 1: Introduction and Installation Downloading and installing SpagoBI. Download SpagoBI ...
- Windows 远程连接 CentOS 7 图形化桌面
1.安装VNC yum install tigervnc-server 解决方法: rm -f /var/run/yum.pid 删除文件后再运行yum即可 2.从VNC备份库中,复制service文 ...
- 因修改/etc/sudoers权限导致sudo和su不能使用的解决方法
因为修改了/etc/sudoers以及相关权限,导致sudo无法使用,恰好Ubuntu的root密码没有设置,每次执行 su - 时.输入密码,提示:认证错误 . 解决方法: 1.重启ubuntu,启 ...
- win10 禁用Defender
cmd reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows Defender" /v "Dis ...
- MySql:charset和collation的设置
From: http://www.2cto.com/database/201302/189920.html MySql:charset和collation的设置 charset 和 collati ...
- Python学习(五)——列表操作全透析
列表是以类的形式实现的. "创建"列表实际上是将一个类实例化. 因此,列表有多种方法能够操作. Python列表操作的函数和方法 列表操作包括下面函数: 1.cmp(list1, ...
- [Learn AF3]第三章 App Framework 3组件之Panel:afui的核心
Panel,afui的核心组件 组件名称:Panel 使用说明:按照官方的说法,panel组件是af3的“核心(heart of the ui)”,panel用于构造应用中独立的内容展示区域, ...