Js(Javascript)中的call方法的使用

在JavaScript中,call() 方法是一个非常重要的函数,可以调用一个函数,同时改变这个函数内部的this上下文。call() 方法的第一个参数是要绑定给this的值,随后的参数将作为被调用函数的参数传递。

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 被设定为绑定的第一个参数。

推荐阅读
cjavapy编程之路首页