call/apply/bind

纸飞机 发表于 2021/10/18 23:43:47 2021/10/18
【摘要】 call、 apply、bind是js函数自带的三个方 法,用来改变函数内部this的指向,三个方法的第一个参数都是是this要指向的对象。 三者区别是: 1 . bind方法返回一个绑定了this之后的新函数,新函数调用了才会执行。而apply、 call会立即执行函数。 2 .它们第二个参数均为函数接受的参数, 但a...

call、 apply、bind是js函数自带的三个方 法,用来改变函数内部this的指向,三个方法的第一个参数都是是this要指向的对象

三者区别是:

1 . bind方法返回一个绑定了this之后的新函数,新函数调用了才会执行。而apply、 call会立即执行函数。

2 .它们第二个参数均为函数接受的参数, 但apply是以数组的形式传入。call、 bind 是以参数列表的形式传入。

—、fn.call(obj, argl, arg2...)

fn使用call方法临时改变一次内部this的指向,并立即执行。

obj : this指向的对象 。当值为null和 undefined时指向window。

arg:要传递给函数fn的参数列表。


  
  1. var Pet = {
  2. words: 'Haha',
  3. speak: function (say) { i
  4. console.log(say + this.words) ;
  5. }
  6. }
  7. var Dog = {
  8. words: 'Wang'
  9. }
  10. //将this的指向改变成TDogo
  11. //输出'HelloWang'
  12. Pet.speak.call(Dog,'Hello'

二、fn.apply(obj, [argl, arg2...])

fn使用apply方法临时改变一次内部this的 指向,并立即执行。

obj : this指向的对象。当值为null 和 undefined 时指向 window。

[arg]:要传递给函数fn的参数组成的数组或伪数组。


  
  1. function Pet(words){
  2. this.words = words;
  3. this.speak = function () {
  4. console.log(this.words)
  5. }
  6. } j
  7. function Dog(words){
  8. Pet.apply(this, arguments);
  9. //将Pet内的this指向构造函数Dog内的this(其实例对象)
  10. } I
  11. var dog = new Dog('Wang');
  12. dog.speak(); //Wang

三、fn.bind(obj, argl, arg2,...)

fn使用bind方法返回一个永久改变this指 向的新函数,fn不会立即执行。

obj : this指向的对象 。 当值为null 和 undefined 时指向 window。

arg:要传递给函数fn的参数列表。


  
  1. var origin = function() {
  2. console.log(this.x, this.y);
  3. );
  4. var o = {x: 1,y: 2};
  5. var bindFun = origin.bind(o);
  6. bindFun();/1 2

  
  1. function f(y, z){
  2. return this.x + y + z;
  3. }
  4. var m = f.bind({x: 1}, 2);
  5. console.log(m(3)); //6

文章来源: root181.blog.csdn.net,作者:前端纸飞机,版权归原作者所有,如需转载,请联系作者。

原文链接:root181.blog.csdn.net/article/details/119851351

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至:cloudbbs@huaweicloud.com进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。