博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
call、apply、bind
阅读量:6618 次
发布时间:2019-06-25

本文共 1517 字,大约阅读时间需要 5 分钟。

***call,apply,bind

替换this

何时: 只要this不是想要的都可用call,apply,bind替换

选择:

 call/apply: *调用*函数,在调用时,*临时*替换函数中的this为指定对象.

   何时: 希望在调用函数时,临时替换this,就用call

   apply的作用和call完全一样!

   差别: apply要求传入函数的参数必须放在数组中传入。

apply自动打散数组类型参数为单个数据再传递给函数参数

回顾: Math.max(1,2,…)

     Math.max.apply(null,arr)

  apply: 1. 调用max

            2. 用null代替max的this——无视

            3. 打散arr,再分别传给max

 

 bind: 基于原函数*创建*一个新函数*永久*绑定其中的this为指定对象

 

 

function calc(base,bonus1,bonus2){    console.log(this.ename+"的总工资是:"        +(base+bonus1+bonus2));  }  var lilei={ename:"Li Lei"};  var hmm={ename:"Han Meimei"};  calc.call(lilei,10000,1000,2000);  var hmm_sals=[3000,4000,5000];  calc.apply(hmm,hmm_sals);  //calc(10000,1000,2000);  var lilei_calc=calc.bind(lilei,10000);  //lilei_calc:function(base=10000,bonus1,bonus2){
// ...lilei.ename... // } lilei_calc(1000,2000); lilei_calc(2000,3000); //lilei_calc.call(hmm,3000,4000,5000);

 

var name = 'global';var person = {    name: 'zero'};// 输出姓名、年龄和职业function printInfo(age, job) {    console.log(this.name, age, job);}// 直接调用printInfo(20, '前端工程师');// 打印:global 20 前端工程师// 因为默认的上下文是window,所以this.name是全局定义的global,如果我们想打印出来zero的话,就需要改变函数执行的上下文printInfo.call(person, 20, '前端工程师');printInfo.apply(person, [20, '前端工程师']);// 这两种方式是一样的,第一个参数都是传进去的上下文,this.name取的是person.name,所以打印出来的名字就是zero了,后面的为age和job,只是参数传递的方式不一样,apply比较特殊,把要传的参数放在数组里面// 而bind和以上两种有区别,bind是es5定义的新方法,用来返回一个有自己上下文的函数,用法也比较类似:printInfo.bind(person)(20, '前端工程师');// printInfo.bind(person)这一块是返回的以peron为上下文的函数,后面的(20, '前端工程师')是函数调用

 

转载于:https://www.cnblogs.com/weiyf/p/8779615.html

你可能感兴趣的文章
ASP.NET Core 中文文档 第三章 原理(4)路由
查看>>
发生错误,需要终止调试,HRESULT=0x8000ffff. ErrorCode = 0x0
查看>>
C++回调函数用法
查看>>
Linux for windows cp 数据中文乱码
查看>>
InnoDB数据页结构
查看>>
Sql日期时间格式转换大全
查看>>
WPF学习之依赖项属性
查看>>
科大讯飞平台接口的基本使用流程
查看>>
关于“结对编程”
查看>>
Ubuntu16.04下用Anaconda 安装Theano配置CUDA
查看>>
权限及权限管理
查看>>
Linux-基础一
查看>>
bzoj千题计划154:bzoj3343: 教主的魔法
查看>>
spring boot学习(2) SpringBoot 项目属性配置
查看>>
R语言 关联规则
查看>>
性能优化工具---iostat
查看>>
c++学习之路:函数重载
查看>>
TS和C#的差异
查看>>
$noip2018$游记+考后总结
查看>>
CSS选择器
查看>>