1、基本用法
调用一个函数,并将其this上下文设置为指定对象。
function greet() { console.log("Hello, " + this.name); } var person = { name: 'CJavaPy' }; // 使用call()调用greet函数,并将person作为this上下文 greet.call(person); // 输出: Hello, CJavaPy
2、传递参数
如果函数需要参数,可以在调用call()方法时,继续传递这些参数:
function greet(greeting, message) { console.log(greeting + ', ' + this.name + '. ' + message); } var person = { name: 'CJavaPy' }; // 使用call()调用greet函数,传递参数 greet.call(person, 'Hello', 'cjavapy.com');
3、使用示例
Function.call(obj[,param1,param2,...])
obj:这个对象将代替Function类里this对象
param1:Function的第一个参数。param2: Function的第二个参数。
call和apply区别主要是参数不同 ,apply方法的第二个参数是一个数组。
示例代码如下:
function man() { this.Name="man"; this.SayName=function(){ console.log(this.Name); } } function woman() { this.Name="woman"; this.SayName=function(){ console.log(this.Name); } } function say(word,age) { //只有say方法的this是man,或是woman对象才可以调用,say方法本身是没有SayName方法的。 if(this.SayName) this.SayName(); console.log(word+age); } var m=new man(); var w=new woman(); //通过call方法调用say say.call(m,"abc",20); //用apply调用 say.apply(m,["abc",20]); //用bind调用 say.bind(m,"abc",20)();//返回的是方法,还要在执行一下
4、call()与 apply() 和 bind() 的区别
apply()
与 call()
类似,但它接受一个参数数组而不是一系列参数。bind()
创建一个新的函数,可以在稍后调用,this
被设定为绑定的第一个参数。