理解Javascript的call、apply_javascript技巧

來源:互聯網
上載者:User

call 方法在使用一個指定的this值和若干個指定的參數值的前提下調用某個函數或方法.

注意:該函數的文法與 apply() 方法的文法幾乎完全相同,唯一的區別在於,apply()方法接受的是一個參數數組,而 call()方法接受的是一系列參數列表。

瞭解完這兩個方法的概念後,我們來一步一步理解他們的應用.

改變方法內this的指向
我們先來看下面這個例子

var name = "編程的人";var age = 1;var person = {name:"公眾號:bianchengderen",age:20}function say(){console.log("我叫:"+this.name+",年齡:"+this.age)}say();// 我叫: 編程的人,年齡: 1say.call(person);//年齡:20

這兩種調用執行的方式不一樣,他們的結果也不一樣,不一樣在於say方法裡面的this指向了不同的對象,第一次執行指向的是window,而我們以call方式執行,將say方法裡面的this指向了person對象.
這是不是有點冒充別人的感覺.那我們這樣有什麼作用了?當然自己可以多多想想,到底能做什麼! 我們繼續往下面走.

實現繼承機制
繼承,這是進階物件導向的一種特性,用call我們可以將JAVASCRIPT有這種特點.
在看下面這個例子之前,必須好好理解上面的例子.

function Person(){this.name = "編程的人";this.age = 20;}function Student(){Person.call(this);this.school = "地球";}var student = new Student();//下面列印出來: 編程的人,20,地球console.log(student.name,student.age,student.school);

在這個例子裡,Student函數繼承了Person的name和age屬性,就是通過Person.call(this)來實現,理解上面的例子後,應該是不難理解的.所以Student即擁有了Person的特點,又有自己的個性,比如這個this.school.

在這裡,我們沒有涉及到加入參數的傳遞,是方便大家的理解,需要加入參數傳遞,大家可以敲代碼試一試,看看效果怎麼樣!

我們就先講這兩個例子吧,之後再進行深入學習。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.