js call()方法的作用

原文鏈接:https://blog.csdn.net/qq_40872870/article/details/81238785

先看看關於call()的官方解釋,“調用一個對象的一個方法,以另一個對象替換當前對象。”,看了這樣的解釋,或許讓你更摸不着頭腦了。看例子:

 

 
  1. var x = "我是全局變量";    //定義全局變量x

  2. function a(){         //定義函數類結構a  

  3. this.x = "我是在函數類結構a中聲明的哦";

  4. }

  5. //定義普通函數,彈出當前指針所包含的變量x的值

  6. function f(){

  7. alert (this.x);

  8. }

  9. //返回值爲“我是在函數類結構a中聲明的哦”

  10. f.call(new a());

我的理解是,f.call(new a())就是把函數(其實也是對象)f複製到被調用對象“new a()”下面去解析,事實上和下面這段代碼的解析結果一樣:

 

 
  1. function a(){

  2.   this.x = "我是在函數類結構a中聲明的哦";

  3.   alert(this.x);

  4. }

  5. a();

只不過此時變量X的作用域不同而已,咿…看起來好像有點繼承的味道哦,難道不是嗎?在上例中,f完全被構造函數a的實力對象繼承了,如果說這還不足以說明a.call(b)是一種繼承模式,那麼再看一個更具有繼承味道的用法吧。

 

 
  1. function f(){

  2. this.a ="a";

  3. this.b = function(){

  4. alert("b");

  5. }

  6. }

  7. function e(){

  8. f.call(this);

  9. }

  10. var c = new e();

  11. alert(c.a); //彈出a

  12. c.b(); //彈出b

在這個例子中,只要會使用瀏覽器的朋友,都能看得出來e完全繼承了f的屬性和方法,否則是無法解釋的,因爲在e中並沒有定義屬性a和b,那麼按常理推斷在e的實例對象c中,並不會出現這兩個屬性。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章