call()、apply()、bind()

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

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;session

参数的第二部分:须要传递的参数,能够是一个,也能够为多个;app

apply第二部分须要的是一个数组做为参数;函数

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

可是第二部分都可以传arguments;es5

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

 

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()code

属于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,女;北京大学2
13 person.say.apply(other,['清华大学','3']);//lili,女;北京大学3
14 person.say.bind(other,'南开大学',4)();//lili,女;北京大学4
相关文章
相关标签/搜索