Java script OOP——淺談

來源:互聯網
上載者:User

標籤:http   for   alert   私人變數   console   構造   interval   src   set   

一、this的詳解

     1、誰最終調用函數,this就指向誰。(具體如下:)

         ① this指向的,永遠只可能是對象!
         ② this指向誰,永遠不取決於this寫在哪!!而是取決於函數在哪調用。
         ③ this指向的對象,我們稱之為函數的上下文context,也叫函數的調用者。

     2、this的指向規律(共有六條這是重點)

          ① 通過函數名()直接調用:this指向window

                function func(){

                      console.log(this);
                }
                func(); 

      
          ② 通過對象.函數名()調用的:this指向這個對象     

                var obj = {
                     name:"obj",
                     func1 :func
                };
                obj.func1(); 


          ③ 函數作為數組的一個元素,通過數組下標調用的:this指向這個數組    

                 var arr = [func,1,2,3];
                 arr[0](); // this--->arr


          ④ 函數作為window內建函數的回呼函數調用:this指向window setInterval setTimeout 等...   

                 setTimeout(func,1000);// this--->window
                 //setInterval(func,1000);

 
         ⑤ 函數作為建構函式,用new關鍵字調用時:this指向新new出的對象

                    var obj = new func(); //this--->new出的新obj


         ⑥通過call、apply和bind調用,this指向我們規定的對象。(人為控制的)
                func.call(obj,參數1 參數2 參數3....)
                func.apply(obj,參數1 參數2 參數3....)
                func.bind(obj,參數1 參數2 參數3....) var f = function.bind(obj)

二、原型鏈        

           1、通過建構函式new出的對象,新對象的_proto_指向建構函式
           2、所有函數的_proto_指向function()內建函數的prototype
           3、非建構函式new出的對象包括( {} newObject() 對象的prototype )的_proto_指向Object的prototype
           4、Object的_proto_指向null

                            如下是一張自繪的原型鏈圖

                      

 

三、閉包

    JS中的範圍

         1、全域變數:函數外聲明的變數

             局部變數:函數內聲明的變數

              在JS中,函數為唯一的局部範圍,而if、for等其他{}沒有自己的範圍
             所以,函數外不能訪問局部變數。其實,變數在函數執行完畢以後,佔用的記憶體就被釋放。

        2、如何訪問函數私人變數?
            JS中,提供了一種"閉包"的概念:在函數內部,定義一個子函數,可以用子函數訪問父函數的私人變數。執行完操作以後,將子函數通過return返回。
              function func2(){
                    var num = 1;
                    function func3(){
                           var sum = num+10;
                            alert(sum);
                   }
                  return func3;
               }

               var f = func2();
               f();

        3、閉包的作用:
               ① 訪問函數的私人變數;
               ② 讓函數的變數始終存在於記憶體中,而不被釋放。

Java script OOP——淺談

聯繫我們

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