1. 程式人生 > >關於call()和apply()方法的一點心得

關於call()和apply()方法的一點心得

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()中給定要傳的引數,一般個數上來說是一定的。

總的來說,當你想用一個方法,但是這個方法自身沒有,而你剛好又知道誰有這個方法,這個時候就可以使用上述的方法,把別人的東西拿來為我所用。