關於call()和apply()方法的一點心得 阿新 • • 發佈:2019-02-09 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()中給定要傳的引數,一般個數上來說是一定的。 總的來說,當你想用一個方法,但是這個方法自身沒有,而你剛好又知道誰有這個方法,這個時候就可以使用上述的方法,把別人的東西拿來為我所用。