call、apply作用相同只是传递参数的方式不同。
- 更改this指向,从而扩充了函数作用域
- 调用函数
- 传递参数
function sayName(age,sex){
console.log(this.name+"-"+sex+"-"+age);
}
let p1 = {name:"zhangsan"};
let p2 = {name:"lisi"};
//单个变量传递参数
sayName.call(p1,18,"女"); //zhangsan-女-18
//以数组或者arguments对象传递参数
sayName.apply(p2,[19,"男"]);//lis-男-19
bind
创建函数的实例,其this值会被绑定到传给bind函数的值,其返回值仍然是函数,需要手动执行。
let p3 = {name:"你是谁?"};
//参数只能单个传递,不能以数组或者arguments形式
let f = sayName.bind(p3,30,"男"); // 返回sayName的实例,未执行
f();//你是谁?- 男 - 30
网友评论