call,apply,bind的区别
来源:互联网 发布:问道源码大全 编辑:程序博客网 时间:2024/05/18 23:58
以下例子都以这个对象为基础
var people = { user: "zhengwenlong", getAge: function (birth) { var date = new Date; console.log(this.user +':'+ (date.getFullYear() - birth)) }};
单纯调用获得年纪这个方法:
people.getAge(1993); //zhengwenlong:24
上面代码如我们所愿,能打印出来zhengwenlong:24(当然,只有你本机时间是2017年的时候)
接着换一种方法来试一下:
var p = people.getAge; p(1993); //undefined:24
名字哪儿去了?咋成了undefined?这里就又要开始说this了,调用p的时候this指向到了window,window下没有user啊,所以就成了undefined
这里可以验证一下这个说法是否成立
在定义people这个对象之前先定义一个master
var user = "master"var people = { user: "zhengwenlong", getAge: function (birth) { var date = new Date; console.log(this.user +':'+ (date.getFullYear() - birth)) }};var p = people.getAge; p(1993); //master:24
打印出来master:24,没毛病
虽然有方法来实现这个查看年纪的方法,但是有些时候不得不把这个对象保存到另外的一个变量中的时候,可以通过以下方法
一、call
var p = people.getAge;p.call(people, 1993)//zhengwenlong:24
这个也能很好的调用到people对象内部的变量及方法
call方法能改变函数执行的上下文,也就是this的指向,第一个参数就是你希望的this指向,后面的参数是你调用的这个函数的里面需要传的值,这里可以传多个值
你也可以这样
//只做示例var p = people.getAge;p.call(people, 1993, 11, 02);
二、apply
apply的用法和call基本类似,只不过后面的参数以数组形式传递,数组里面对应的就是函数里面接受的参数
//只做示例var p = people.getAge;p.call(people, [1993, 11, 02]);
如果call和apply的第一个参数写的是null,this指向的是window对象
三、bind (ES5)
var p = people.getAge;b = p.bind(people, 1993);
what?为啥控制台什么也没有,我们来看看这个b到底是个什么鬼?
来试一下
var p = people.getAge;var b = p.bind(people, 1993);console.log(b);//ƒ (birth, a) {// console.log(birth, a)// var date = new Date;// console.log(this.user + ':' + (date.getFullYear() - birth))//}
soga,b原来是一个函数,那我们就只好这样来用了
var p = people.getAge;var b = p.bind(people, 1993);b();//zhengwenlong:24
当然也是可以传多个值的
//只做示例var p = people.getAge;var b = p.bind(people, 1993, 12, 09);b();
还能这样用
//只做示例var p = people.getAge;var b = p.bind(people, 1993);b(12, 09);//根据接收的参数顺序往后排列
阅读全文
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的区别
- swiper使用时在loop下如何获取当前的索引值
- UI设计师应掌握的知识体系以及职业规划
- Python3.6 安装jpype1 遇到的一些坑以及最后安装jpype1成功的解决方法,不得不说
- BigDecimal和DecimalFormat
- 视频中的运动特征--Learning Motion Patterns in Videos
- call,apply,bind的区别
- 电脑上虚拟打印机如何将word转jpg
- LeetCode 16. 3Sum Closest
- autodesk backburne卸载问题
- sqlite基础一
- Dubbo与Zookeeper、Spring整合和使用
- ScrollView反弹效果 仿小米私密短信效果 android布局可滚动
- python遍历目录文件
- 微信实现分享转发功能