javascript原型鏈與特權方法

來源:互聯網
上載者:User

javascript原型鏈與特權方法


function ClassA() { var value=4; this.getValue= function() { return value; } this.setValue= function(value) { this.value=value; } } var instance= new ClassA(); document.write(instance.getValue()); classA.setValue(1); document.write(instance.getValue()); document.write(instance.value); 



 

輸出結果為:4,4,1。

 

原因是:var value 是私人變數,它與this.value不是同一個值。

 

下面我們分析下對象執行個體的建立與私人變數如何訪問。

 

1.執行個體屬性與原型屬性

 

javascript對象建立執行個體時,執行個體屬性和方法只有通過建構函式中的this,才可以賦給執行個體。如果想建立共用的屬性或者方法,那麼可以通過原型鏈共用。

建立共用的屬性:

 

     function ClassA() {        var value=4;        this.getValue= function()        {            return value;        }        this.setValue= function(value)        {            this.value=value;        }     }    ClassA.prototype.value=1;//共用的value    var  instance1=new ClassA(),//         instance2=new ClassA();   consloe.log(instance1.value);//1   consloe.log(instance2.value);//1   console.log(ClassA.value);//undefined   

 

 

那麼ClassA()中的私人屬性value我們可以通過ClassA.value訪問嗎?答案是不能。

 

我們分析下對象執行個體中標識符的尋找。執行個體尋找一個屬性時,分為兩步:

(1).在執行個體本身的執行個體屬性中尋找。

(2).如果尋找不到執行個體屬性,那麼順著原型鏈會找到對象的原型。

 

ClassA.value 在ClassA的執行個體屬性中尋找不到,那麼繼續尋找原型鏈,ClassA是Object的執行個體,因此會尋找Object.prototype.value,顯然值為undefined。

2.私人變數的訪問

我們知道,javascript沒有塊級範圍,但是我們可以通過函數來類比塊級範圍。而塊級範圍裡面的變數,稱為私人變數。私人變數,外部無法訪問,我們可以在函數內部

產生特權方法(特權方法:能夠訪問私人變數的方法),這裡的特權方法就是this.getValue();通過建構函式建立,是建立特權方法的一種方法。

 

建立特權方法的另外一種方式就是:靜態方法。

 

function ClassA() {        var value=4;        this.getValue= function()        {            return value;        }        this.setValue= function(value)        {            this.value=value;        }        ClassA.getValue=function(){  //靜態方法            return value;        }     }

 

 

 

 

 

 

 

聯繫我們

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