为什么需要使用到他们

  

var say = {
  name: 'Mike',
  hi: function () {
      console.log('hi ' + this.name)
  }
};
function sayHi(name){
  this.name = name;
  
}
say.hi.call(new sayHi('Bob'));

 

就是当新的一个对象,使用到了其他对象一样的方法或操作,把他人的东西拿来抹去他调用本身的用我的。

说白了就是这个机器(函数)本来是用别人的钱(this)可以启动,但是我把别人的钱(this)换成了自己的。

 

相同点:

  他们的相同都是来改变this的指向问题。

不同点:

  call传参是有多个的参数,第一个是this的指向的对象,后面的是需要使用到的参数。

  apply是两个参数第一个是this的指向的对象。第二个参数是一个数组。

//例如:
var obj = {}//定义一个空的对象
function f(x,y){
console.log(x,y)
console.log(this) //this是指obj
}
f.apply(obj,[1,2]) //后面的值需要用[]括起来
f.call(obj,1,2) //直接写

 

  bind的传参数和call是一样的,但是call使用了就会直接执行这个函数,但是bind是返回一个函数。需要再执行。

//例如:
function f(){
console.log("看我怎么被调用");
console.log(this) //指向this
}
var obj = {};
f.call(obj) //直接调用函数
var g = f.bind(obj); //bind()不能调用函数
g();  //此时才调用函数

 

posted on 2021-05-07 09:22  晓欲望!  阅读(49)  评论(0)    收藏  举报