call、apply与bind(Function.prototype中的属性)
我觉得这么一说,就明白了为什么会去调用函数了。
call()或apply()的好处是可以把任意对象设置为任意函数的作用域。
等同于将函数作为了对象的属性,然后通过对象.属性的方式调用函数。
而bind()会创建新的函数实例, 其this值会被绑定到 传给bind()的对象。
call() 方法使用一个指定的 this 值和单独给出的一个或多个参数
来调用一个函数。function.call(thisArg, arg1, arg2, …)
参数 :thisArg. 可选的。在function函数运行时的this值
。请注意,this可能不是该方法看到的实际值:如果这个函数处于非严格模式下,则指定为 null 或 undefined 时会自动替换为指向全局对象,原始值会被包装.返回值 : 使用调用者提供的 this 值和参数调用该函数的返回值。若该方法没有返回值,则返回 undefined function f ( ) {
console. log ( this + '\n\nf' ) ;
}
function f1 ( ) {
console. log ( this + '\n\nf1' ) ;
}
f . call ( f1) ;
function f ( ) {
console. log ( this + '\n\nf' ) ;
}
function f1 ( ) {
console. log ( this + '\n\nf1' ) ;
}
f . call ( ) ;
function f ( value ) {
console. log ( value) ;
console. log ( this + '\n\nf' ) ;
}
function f1 ( ) {
console. log ( this + '\n\nf1' ) ;
}
f . call ( f1, 'fjh' ) ;
apply() 基本类似于 call(),不同在于参数是数组/伪数组。func.apply(thisArg, [argsArray])
参数 :thisArg. 必选的。在 func 函数运行时使用的 this 值。返回值 :调用有指定this值和参数的函数的结果。apply应用 bind() fun.bind(thisArg[, arg1[, arg2[, …]]])
参数 :调用绑定函数时作为 this 参数传递给目标函数的值返回值 :返回一个原函数的拷贝,并拥有指定的 this 值和初始参数bind应用 window. color = "red" ;
var o = {
color: 'blue'
} ;
function sayColor ( ) {
console. log ( this . color) ;
}
let objectSayColor = sayColor . bind ( o) ;
objectSayColor ( ) ;
1. 不会执行对应的函数,call或apply会自动执行对应的函数
2. bind是ES5新增的一个方法.