call(), apply(), bind()三个方法属于函数的内建函数,任何一个函数都可以调用这三个方法;
通过这三个方法中的任何一个,可以改变某个函数运行时的上下文(context)。可以理解为改变函数体内部 this 的指向。
接下来分别介绍这三个方法的使用:
call
使用一个指定的 this 值和单独给出的一个或多个参数来调用一个函数;
语法:
/*
thisArg: 函数运行时指定的 this 值,
当thisArg的值为:undefined 或者 null,this = window
当thisArg的值为: number 或者 boolean 或者 string, this为对应的包装类,如new Number(), new Boolean(), new String()
arg1, arg2, ...:参数列表,参数通过逗号隔开
*/
fun.call(thisArg, arg1, arg2, ...)
apply
调用一个具有给定this
值的函数,以及作为一个数组(或类数组对象)提供的参数。
语法:
/*
thisArg: 函数运行时指定的 this 值,
当thisArg的值为:undefined 或者 null,this = window
当thisArg的值为: number 或者 boolean 或者 string, this为对应的包装类,如new Number(), new Boolean(), new String()
argsArray:参数数组,参数通过数组装起来
*/
func.apply(thisArg, [argsArray])
bind
创建一个新的函数
语法:跟call()方法是一样的。
返回值:返回一个原函数的拷贝,并拥有指定的this值和初始参数。
简单示例:
var name = "OutterName";
var obj = {
name: 'ObjName',
}
function printName(age) {
console.log("my name is " + this.name + ",age = " + age);
}
printName.call(null, 20);
printName.apply(obj, [21]);
printName.bind(obj)(22);
结果:
结果.png
注意:call()方法的作用和 apply() 方法类似,区别就是call()方法接受的是参数列表,而apply()方法接受的是一个参数数组。
更多的方法,在后续用到的时候,在进行补充;
网友评论