JS之apply,call,bind区别
为了加深对基础知识的理解,今天再复习下js中的apply,call,bind的区别和用法。整理笔记的过程也是一个再次学习的过程。
apply和call
js中的调用apply和call方法可以改变某个函数执行的上下文环境,也就是可以改变函数内this的指向值。
例子:
var person={
name:'aa',
getName:function(){
console.log(this.name);
}
}
var person2 = {
name:'bb'
}
person.getName();
person.getName.call(person2);
person.getName.apply(person2);
person2中没有getName()方法,但是person2想执行getName()方法,就可以使用apply或call方法来借用person中的getName()方法。
当一个对象A没有某个方法时,其他对象B有该方法,就可以使用call或apply来借用对象B中的这个方法。这个时候就动态的改变了this的值。
apply,call二者区别
二者作用相同,区别是传入参数的方法不同。
例子:
var person={
name:'aa',
getName:function(){
console.log(this.name);
},
getPerson:function(age,sex){
this.age = age;
this.sex = sex;
console.log(this)
}
}
var person2 = {
name:'bb'
}
person.getName();
person.getName.call(person2);
person.getName.apply(person2);
person.getPerson.call(person2,'1','男');
person.getPerson.apply(person2,['2','女']);
call()和apply()方法的参数中,第一个参数是指定的上下文环境或者指定的对象,call()方法中后面的所有参数都是用逗号表示,apply()方法中所有参数都是用数组表示。如果参数数量确定,可以使用call方法,如果数量不确定,则使用apply方法。
bind()方法
bind() 方法与 apply 和 call 很相似,也是可以改变函数体内 this 的指向。
MDN的解释是:bind()方法会创建一个新函数,称为绑定函数,当调用这个绑定函数时,绑定函数会以创建它时传入 bind()方法的第一个参数作为 this,传入 bind() 方法的第二个以及以后的参数加上绑定函数运行时本身的参数按照顺序作为原函数的参数来调用原函数。
语法:
var bound = fun.bind(this,arg1,arg2...);
如果只是想改变上下文环境,而非执行该函数,则使用bind方法。apply/call会马上执行该函数。
总结:
apply,call,bind都是改变函数的this指向的,改变函数执行的上下文环境。
apply,call,bind第一个参数指this需要指向的对象,也就是函数运行时所处的对象环境。
bind返回新的函数,但是不执行,apply/call会立即执行该函数。
参考:
http://www.cnblogs.com/coco1s/p/4833199.html
JS之apply,call,bind区别的更多相关文章
- call和apply和bind区别
call和apply特征一样 都是用来调用函数 立即调用 但是可以在调用函数的同时 通过第一个参数指定函数内部this的指向 call 调用的时候 参数必须以参数列表的形式进行传递 也就是以逗号分隔的 ...
- apply,call,bind区别
js中有三个改变this指针的方法,分别是 apply,call,bind.很多人只知道能改变的this,但是具体的适用场景不是太清楚.我也是遇到坑后不断的实践发现了区别. call ,apply方法 ...
- javascript中apply,call,bind区别,bind兼容等问题总结
1 三者的相似之处: (1).都是用来改变函数的this对象的指向的 (2).都是用第一个参数来做this对象的指向 (3).都可以传参数进去 那么,具体到它们有什么区别呢?请看下面的例子: 两个对象 ...
- call(),apply(),bind()区别?
每个函数都包含两个非继承而来的方法,apply()和call(),这两方法的用途都是在特定的作用域中调用函数,实际上等于设置函数数体内的this对象的值. apply()和call()第一个参数都一样 ...
- call、apply、bind 区别
1.为什么要用 call .apply? 为了 改变方法里面的属性而不去改变原来的方法 function fruits() {} fruits.prototype = { color: "r ...
- JS中用apply、bind实现为函数或者类传入动态个数的参数
为纪念10年没写blog,第一篇博文就以这样一个有趣的窍门开始吧 -___- 在ES5中,当我们调用一个函数时,如果要传入的参数是根据其他函数或条件判断生成的,也就是说不确定会传入多少个参数时,在不改 ...
- js中call、apply和bind的区别
在JS中,这三者都是用来改变函数的this对象的指向的,他们有什么样的区别呢.在说区别之前还是先总结一下三者的相似之处:1.都是用来改变函数的this对象的指向的.2.第一个参数都是this要指向的对 ...
- js中的call,apply,bind区别
在JavaScript中,call.apply和bind是Function对象自带的三个方法,这三个方法的主要作用是改变函数中的this指向. call.apply.bind方法的共同点和区别:app ...
- js中call、apply和bind到底有什么区别?
介绍 在js中,每个函数的原型都指向Function.prototype对象(js基于原型链的继承).因此,每个函数都会有apply,call,和bind方法,这些方法继承于Function. 它们的 ...
随机推荐
- C语言的判断语句
// // main.c // homeWork1222 //// #include <stdio.h> int main(int argc, const char * argv[]) { ...
- iOS 修改label中文字的行间距
UILabel *label = [[UILabel alloc] init]; label.font = [UIFont systemFontOfSize:]; label.textColor = ...
- 让div中的table居中
div 标签上写 style="text-align:center" div中的table中写 style="margin:auto;" <table ...
- AFTER触发器与INSTEAD OF触发器
在对表进行操作时,总会产生 INSERTED 和(或)DELETED表,不管这个操作是否已经进行.这里的和/或,要看进行的什么操作,插入,产生 INSERTED 表,删除,产生DELETED表,而up ...
- SQLServer中char与varchar的区别
今天写一个项目的用户登录部分 刚开始做,所以是数据库和程序一起写 一开始没注意 在定义表T_Person时吧PerID和PerPwd的类型设定都是char(20) 并且写入了几个数据,诸如 id:01 ...
- Android调用Web服务
现在大部分应用程序都把业务逻辑处理,数据调用等功能封装成了服务的形式,应用程序只需要调用这些web服务就好了,在这里就不赘述web服务的优点了.本文总结如何在android中调用Web服务,通过传递基 ...
- 烂泥:kickstart无人值守安装CentOS6.5
本文由秀依林枫提供友情赞助,首发于烂泥行天下. 在本次实验进行之前,首先我们要把公司的网络环境进行介绍. 注意这个网络拓扑图,也是生产环境的一个实例.同时服务器192.168.1.214已关闭ipta ...
- Linux基础问答
1.简述TCP三次握手四次挥手过程及各过程中客户端和服务器端的状态. 1 2 3 4 5 6 7 8 9 10 11 12 13 #三次握手 客户端向服务器端发送SYN包,客户端进入SYN_SEND状 ...
- Web安全--XSS模版
[XSS基本探测pyload] <script>alert("xss")</script> <script>alert(/xss/)< ...
- 电磁兼容设计经验(转载 原文电子科技大学硕士毕业论文DDS扩频技术研究)
2 Corinthians 1:3-4“[Praise to the God of All Comfort] Praise be to the God and Father of our Lord J ...