JavaScript 從對象 new 說起,簡單理解 this/call/apply

來源:互聯網
上載者:User

標籤:

new 

  1. 建立一個新對象;
  2. 將建構函式的範圍賦給新對象(因此this就指向了這個新對象);
  3. 執行建構函式中的代碼(為這個新對象添加屬性);
  4. 返回新對象

  用代碼描述的話(先別管proyotype, apply等):

1 function New (f) {2     var n = { ‘__proto__‘: f.prototype }; /*第一步*/3     return function () {4         f.apply(n, arguments);            /*第二步*/5         return n;                         /*第三步*/6     };7 }

 

This

  this 是一個指標,永遠指向 父級中最近的一個 的 new 對象 執行個體

  在頁面載入時候,javascript 引擎完成 windows 執行個體化, 此時 this 指向 windows;

1 console.log(this === window);      // true2 var value = "i‘m proproty of window instance";3 console.log(value === window.value);  // true4 function show(){5   console.log(this === window);    // true6 }7 show();

 

  只有當 new 一個新對象後,該對象內部的 this 才會全部指向 新的對象;

   備忘:var obj = {} 也是new

  

1 var show = {2     do : function(){3         console.log(this);         // obj4         console.log(this === window);  // false5     }  6 }7 show.do();

 

  特別注意以下情況:

1 var show = {2     do : function(){3         console.log(this);                // window4         console.log(this === window);    // false5     }  6 }7 8 var doFun = show.do;9 doFun();

 

  show.do(): do 作為 show 對象的函數被調用。所以,上下文指的是show;

  doFun():  show.do 被分配到 doFun變數時,因為 doFun 被隱式設定為全域對象的屬性,因此,doFun 的 上下文指的是 window

 

Call & Apply

  文法:

    call([thisObj[,arg1[, arg2[, [,.argN]]]]])

    apply([thisObj[,argArray]])

  Call和apply是改變函數的範圍(scope/上下文);

  將建構函式的範圍賦給新對象(見 new 第二條,此時 this 就指向了這個新對象);

  Call 和 apply是將 this 指向方法的第一個參數。

 1 var value = "i‘m proproty of window instance"; 2 function show(){ 3     console.log(this); 4     console.log(this.value); 5 } 6  7 var obj = { 8       value : "i‘m proproty of obj instance" 9 };10 11 /* 12  * window13  * i‘m proproty of window instance14  */15 show();16 17 /* 18  * obj19  * i‘m proproty of obj instance20  */21 show.call(obj);

 

JavaScript 從對象 new 說起,簡單理解 this/call/apply

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.