JavaScript物件導向總結

來源:互聯網
上載者:User

標籤:多個   fun   預設值   訪問   ret   方法   直接   config   tps   

  對象(Object)應該算是js中最為重要的部分,也是js中非常難懂晦澀的一部分。更是面試以及架構設計中各出沒。本文章,主要參考JavaScript紅寶書(JavaScript進階程式設計 第六章)以及各大博主部落格

談談對象屬性的特性

  畢竟是物件導向編程,我們在討論如何物件導向之前先討論討論對象具有哪些屬性和特性。

屬性類型

  簡單的說,對象擁有四個屬性:

  • [[Configurable]]:是否可以通過delete刪除,能否修改屬性的特性。直白點:是否可配置
  • [[Enumerable]]:枚舉性,表示是否可以通過for-in迴圈返回
  • [[Writable]]:可寫性:是否可以修改屬性的值
  • [[Value]]:包含屬性的值,也就是對應的可讀性。 以上四個對象的屬性的屬性類型預設值分別為:true,true,true,undefined。

  如果要修改屬性預設的特性,必須通過Object.defineProperty()方法。大致如下:

var animal = {};Object.defineProperty(animal,"name",{    writable:false,    value: ‘dog‘});console.log(animal.name);//doganimal.name = ‘cat‘;console.log(animal.name);//dog

  writable:false,表示不可更改屬性的值。從上面的執行個體可以看出,在調用Object.defineProperty()方法後,如果不指定 configurable、enumerable、writable 特性的值時,預設為FALSE。

訪問器屬性

  訪問器屬性不包含資料值,但是包含getter和setter函數。在讀取存取器屬性時,會調用getter函數,這個函數負責返回有效值。在寫入訪問器屬性時,回到用setter函數並傳入新值。

  • [[Configurable]]:表示是否可以通過delete刪除。預設為TRUE
  • [[Enumerable]]:同上面介紹的Enumerable一樣,預設為true
  • [[Get]]:讀取資料時候調用的方法。預設為undefined
  • [[Set]]:在寫入屬性值得時候預設調用的方法。預設為undefined

  這裡不做過多解釋,直接看例子吧(來自js紅寶書)

var book = {    _year:2012,    edition:1};Object.defineProperty(book, ‘year‘,{    get:function(){        return this._year    },    set:function(value){        if(value>2012){            this._year = value,            this.edition++        }    }});book.year = 2013;console.log(book.edition);//2

  其實對於多個屬性的定義,我們可以使用Object.defineProperties方法。然後對於讀取屬性的特性我們可以使用Object.getOwnPropertyDescriptor()方法。

建立對象

  建立對象,我們不是直接可以通過Object的建構函式或者對象字面量的方法來實現對象的建立嘛?當然,這些方法是可以的,但是有一個明顯的缺點:使用同一個介面建立很多個物件,產生大量重複的代碼。所以這裡,我們使用如下的一些操作

原廠模式

  一種很基礎的設計模式,簡而言之就是用函數來封裝以特定介面建立對象的細節。

function createAnimal(name,type){    var o = new Object();    o.name = name;    o.type = type;    o.sayName = function(){        alert(this.name)    }    return o;}var cat = createAnimal(‘小貓‘,‘cat‘);var dog = createAnimal(‘小狗‘,‘dog‘);

 

JavaScript物件導向總結

聯繫我們

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