bind call apply 对象冒充(替换this指向)
bind
bind的作用: 生成新的函数和原函数一样,但是里面的this指向会替换成bind的参数 bind会生成新的函数,新函数内的this指向被替换,生成的函数 this执向是固定的并不是调用的时候去找
var person = {
name: 'wl' ,
age: 18 ,
say : function ( ) {
console. log ( this . name) ;
}
}
var person2 = {
name: 'xy' ,
age: 18 ,
}
var fun = person. say . bind ( person2) ;
fun ( ) ;
call apply
这两个方法是 替函数调用 调用的时候替换this指向 call和apply功能一样,语法不一样,当函数调用的时候需要传递参数时,两者写法不同。 call 调用函数的时候,第一参数是要替换成的this指向,第二个及后面的参数都是给函数传递的参数 call(this指向,a,b,c) abc相当于给函数传参
var person3 = {
name: 'wl' ,
age: 18 ,
say : function ( a ) {
console. log ( a) ;
console. log ( this . name) ;
}
}
var person4 = {
name: 'xy' ,
age: 18 ,
}
person3. say . call ( person4, 'll' ) ;
apply 调用函数的时候,第一个参数是要替换成this的指向,第二个是参数是 数组 里面放的是所有的参数 apply(this指向,[a,b,c]) apply 有的时候并不希望改变this的指向只希望将数组中所有的内容传递给某个函数 this指向参数写成:nul ,0,’’,undefined
function sum ( ) {
var res = 0 ;
for ( var i = 0 ; i < arguments. length; i++ ) {
res = res + arguments[ i] ;
}
return res;
}
var arr = [ 1 , 2 , 3 , 4 , 5 ] ;
console. log ( sum . apply ( null , arr) ) ;