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

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

1.均可以改变函数的执行上下文,也就是this值;

2.call()  apply()

1 function apply(num1, num2){2     return sum.apply(this, [num1,num2]);3     }4 function call(num1, num2){5     return sum.call(this, num1, num2);6     }

 

参数的第一部分:执行上下文,就是this;

参数的第二部分:需要传递的参数,可以是一个,也可以为多个;

apply第二部分需要的是一个数组作为参数;

call第二部分的参数是数组里面的元素,需要一个一个传,用逗号隔开;

但是第二部分均可以传arguments;

如果call和apply的第一个参数写的是null,那么this指向的是window对象。

 

1  var a = {2        user:"zhangsan",3        fn:function(){4          console.log(this);//Window {speechSynthesis: SpeechSynthesis, caches: CacheStorage, localStorage: Storage, sessionStorage: Storage, webkitStorageInfo: DeprecatedStorageInfo…}5      }6  }7  var b = a.fn;8  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,女

带参数形式:

1 var person = { 2     name: 'zhangsan', 3     sex: '男', 4     say: function(school,grade){ 5         console.log(this.name + ',' + this.sex + ';' + school + grade); 6     } 7 } 8 var other = { 9     name: 'lili',10     sex: '女',11 }12 person.say.call(other,'北京大学','2');//lili,女;北京大学213 person.say.apply(other,['清华大学','3']);//lili,女;北京大学314 person.say.bind(other,'南开大学',4)();//lili,女;北京大学4

转载于:https://www.cnblogs.com/zhengyeye/p/9011197.html

你可能感兴趣的文章
mysql查询左边大于左边_MySQL WHERE 子句
查看>>
java 获取颜色_java关于照片属性的获取,颜色模式
查看>>
HDOJ-2054
查看>>
centos7安装eclipse
查看>>
动态规划入门 洛谷P2409 Y的积木
查看>>
【第一季】CH04_FPGA设计Verilog基础(一)Enter a post title
查看>>
jmeter(四十四)常用性能指标分析
查看>>
word 新建一行文字不能左对齐
查看>>
jquery选择器
查看>>
IT公司的等级观念
查看>>
百度编辑器ueditor1.4.3配置记录
查看>>
ubuntu12.04开启Framebuffer
查看>>
【问题和解决】python中nltk与nltk_contrib的关系
查看>>
闭包的探索
查看>>
内存泄漏
查看>>
编程之美 2.12 快速寻找满足条件的两个数 解法三证明 (算法导论 第二版 2.3-7 在n个元素的集合S中找到两个和为x的元素)...
查看>>
open_basedir restriction in effect,解决php引入文件权限问题
查看>>
微信小程序获取用户信息解密AES并且注意如何获取unionid
查看>>
JavaScript设计模式----1
查看>>
Qt实现半透明遮罩效果
查看>>