JavaScript 類 普通屬性與類屬性

來源:互聯網
上載者:User

JavaScript中的類是很繞口的一樣東西。

首先,JS中,一個類其實就是一個函數。廢話不多說,先來一個例子。

c = function() {}

c.prototype = {
c2:1,
c1:function() {}
}

var a = new c();
var b = new c();

 

a和b就是c的對象。

如果訪問a.c2和b.c2就會獲得同樣的值:1。訪問c1方法也是一樣的結果。

這時候,如果執行:a.c2 = 2。那麼b.c2是否會受到影響呢?答案是不會的,b.c2的值仍然保持為1。所以c2就是一個普通屬性。

 

那如果我們想實現一個靜態屬性或者靜態方法該如何做呢?

首先說明,JS中式沒有靜態屬性一說的,假如要做一個類似的東西出來的話,就要藉助JS中的Prototype。

①定義不變,跟上面的例子一樣。

②使用的時候有區別。如果想把c2作為靜態屬性來用的話,就需要這樣:a.__proto__.c2 = 2,那麼這是b.__proto__.c2也等於2。(或者可以直接這樣賦值:c.prototype.c2 = 2,也是一樣的效果)

靜態方法也是類似的。

 

那就有一個問題了,如果我又為a.c2賦值,又為a.__proto__.c2賦值呢?

這個不多解釋,看就明白了。

①初始狀態:

②執行:a.c2 = 2,後

③執行:a.__proto__c2 = 3,後

有圖有真相,不多解釋了。

相關文章

Alibaba Cloud 10 Year Anniversary

With You, We are Shaping a Digital World, 2009-2019

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。