apply,call,bind的区别
来源:互联网 发布:sql语句给字段起别名 编辑:程序博客网 时间:2024/05/18 21:49
apply,call,bind的区别
首先,每个函数都包含两个非继承而来的方法,call和apply,而这两个方法的作用及其相似,即均为在特定的作用域中调用函数,即设置this的值
- **传递参数
- **扩充函数赖以运行的作用域
apply
apply方法接收两个参数,第一个参数为制定函数的执行作用域,第二个参数是一个数组,可以是Array实例,也可以是一个arguments对象。如:
function add(arg1,arg2){ return arg1+arg2;}function applyadd1(arg1,arg2){ return add.apply(this,[arg1,arg2]);}function applyadd2(arg1,arg2){ return add.apply(this,arguments);}
call
call方法与方法的作用完全一样,只是传递参数的方法不同,apply的第二个参数是数组,而apply除了第一个参数为绑定的执行作用域外,其余参数都直接传递给函数,即在使用call方法时,传递给函数的参数必须逐个列举出来,如下:
function calladd(arg1,arg2){ return add.apply(this,arg1,arg2);}
设置this的值
传递参数并不是apply和call的真正意义,它们真正强大的作用在于可以扩充函数赖以运行的作用域,即改变this的值,如下
window.age=12;var obj={o:15};function showage(){ alert(this.age);}showage()//12;showage.call(o);//15showage.apply(window);//15
使用call和apply来扩充作用域的最大好处是,不需要函数和对象之间存在耦合的关系,即不需要将函数放在对象中。
bind
bind会绑定this的值,在绑定作用域方面类似call和apply,不同的是,bind会返回一个函数的实例,只要将这个返回值赋给一个变量,以后再调用这个生成的函数,作用域总是当时绑定的作用域(可以理解为apply,call只是一次性的,而bind是生成一个新的不同作用域的函数,以后可以随时调用),如
window.age=12;var obj={o:15};function showage(){ alert(this.age);}var showageofo=showage.bind(o);showage()//12;showageofo();//15
阅读全文
0 0
- call、apply 、bind的区别
- call,apply,bind的区别
- call、apply、bind的区别
- apply,call,bind的区别
- apply bind call区别
- apply call bind区别
- bind(),call(),apply()区别
- Javascript中call(),apply(),bind()的区别
- Javascript中apply、call、bind的区别
- javascript -- apply/call/bind的区别
- JS中apply call bind的区别
- call,apply与bind方法的区别
- call,apply,bind的联系与区别
- call,apply和bind的区别?
- call apply 和 bind的区别
- apply、call和bind的区别
- JS中call、apply、bind的区别
- 简述call,apply,bind的区别
- PAT 甲级 1115. Counting Nodes in a BST (30)
- PAT 甲级 1116. Come on! Let's C (20)
- java学习第31天,calendar转换
- java算法(1)
- 主从复制原理
- apply,call,bind的区别
- ReactNative基础(三)了解ScrollView并打造一个Banner效果
- java算法(2)
- 文章标题
- Rgb转换三原色
- 《程序员修炼之道—从小工到专家》注重实效的哲学
- 【网站建设】关于服务器跪掉了
- java算法(3)
- java笔记(二)static和final