为什么需要使用到他们
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(); //此时才调用函数
 
                    
                 
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号