關於私人變數,靜態私人變數

來源:互聯網
上載者:User

標籤:style   blog   color   io   使用   ar   div   cti   sp   

有權訪問私人變數和私人函數的公有方法稱之為特權方法,對象上建立特權方法的方式有兩種。

第一種:直接在建構函式中定義特權方法,基本模式如下

function MyObject(){    var privateVariable = 10;    function privateFunction(){        alert(1);        }        this.publicMethod = function(){        privateVariable++;        return privateFunction();        }//特權方法}var aa = new MyObject();aa.publicMethod();
this.publicMethod 方法作為MyObject函數的閉包因而有權訪問在建構函式中定義的變數和方法,aa執行個體中,除了用publicMethod()這個特權方法來訪問外,沒有任何其他辦法直接存取privateVariable和privateFunction()。在這個執行個體中
publicMethod()即為 建構函式MyObject的特權方法之一。

建構函式中定義特權方法有一個缺點,就是必須使用建構函式模式來達到這個目的,而建構函式模式的缺點是每個執行個體都會建立同樣的一組新方法。

靜態私人變數

通過在私人範圍中定義私人變數或函數同樣可以建立特權方法,基本模式如下
(function(){    var praviteVariable = 10;    function praviteFunction(){        return false;        }    MyObject = function(){            }    MyObject.prototype.publicMethod = function(){        privateVariable++;        return privateFunction();        }})();

這個模式中建立了一個私人範圍,裡面封裝了一個建構函式。公有方法使用了原型定義,這個模式在定義建構函式式沒有使用函式宣告,也沒有在聲明MyObject時使用var,那麼由於未經初始化的變數總是會建立一個全域變數的緣故,MyObject就此成為了一個全域變數,能夠在私人範圍之外被訪問到。

這種模式與建構函式中定義特權方法的主要區別在於,這種方法下私人變數和函數是由執行個體共用的,由於這個特權方法實在原型上定義的,因此所有的執行個體都使用同一個函數,但是因為這個特權方法是作為一個閉包,因此這個閉包總是包含著範圍的引用,導致的後果就是每個建立的執行個體所使用引用的變數都是一樣的,即不管哪個執行個體改變了變數的值,其他執行個體中這個變數的值也會被改變,因為這個特權方法總是儲存著對包含範圍的作用。

關於私人變數,靜態私人變數

聯繫我們

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