关于call()和apply()方法的一点心得

时间:2021-07-15 18:34:12

1. 这两个是JS原生方法;

2. 自我理解:这个给“懒人”准备的方法;

3. 举例(重点):

//example 1:

function Person(name, age)

 {

                this.name = name;

                this.age = age;

 }

 function Student()

 {

          //do nothing

 }

 var stu = new Student();

alert('name: ' + stu.name + '\n' + 'age: ' + stu.age); // name: undefined  age:undefined

小结:以上未能弹出学生的姓名和年龄信息,因为我们在学生的类里什么都没做。


//example 2:

function Person(name, age)

{

    this.name = name;

    this.age = age;           

 }          

 function Student()

 {

      Person.apply(this, arguments);

 }          

var stu = new Student('Tom', 21);

alert('name: ' + stu.name + '\n' + 'age: ' + stu.age); // name: Tom age: 21


//example 3:

function Person(name, age)

 {

  this.name = name;             

  this.age = age;            

 }          

 function Student()         

 {

     Person.call(this, 'Tom', 21);

 }

  var stu = new Student();

  alert('name: ' + stu.name + '\n' + 'age: ' + stu.age);//name: Tom age: 21


总结:

1. 当Student类中什么都没有时,仍然想要显示学生的姓名和年龄,那么就要借用Person类中的方法来实现。

2. 如何借用?使用apply()或者call(), 因为Person中有name和age两个属性,借过来用的话,Student类中当然也就有

    了name和age属性啊!在创建好学生类的实例后,就可以使用name和age属性了。

3. apply()和call()有和区别?二者的区别在于参数的不同。apply()中使用的是arguments, 一般适合参数不确定的时候使用;

    call()中给定要传的参数,一般个数上来说是一定的。

总的来说,当你想用一个方法,但是这个方法自身没有,而你刚好又知道谁有这个方法,这个时候就可以使用上述的方法,把别人的东西拿来为我所用。