Javascript高級程序設計——面向對象之理解對象

在面嚮對象語言中都有類的概念,經過類來建立具備屬性方法對象。而ECMAScript中沒有類的概念,ECMAScript中定義了對象:無需屬性的集合,其屬性值能夠包含基本值、對象、或者函數。 javascript

在Javascript中每一個對象都是基礎引用類型來建立的,能夠是原生類型也能夠是自定義的類型。 java

    自定義對象最簡單的方法就是經過建立Object類型的實例,而後爲這個實例添加屬性和方法。 瀏覽器

var Person = new Object(); 函數

Person.name = "yangxunwu"; this

Person.age = 24; spa

Person.sayName = function(){ 對象

alert(this.name); ip

}; 字符串

 

咱們這裏建立了一個object類型的一個名爲Person的對象,有兩個屬性name和age,一個方法sayName; get

屬性類型:

對象擁有屬性,這些屬性也有一些特性,好比Configurable、Enumerable、Writable、Value。在javascript不能直接訪問這些特性,需經過對象的方法訪問,好比Object.defineProperty()

數據屬性:數據屬性包含這個數據值的位置,在這個位置能夠讀取和寫入值。數據屬性有四個特性:

Configurable:可否經過delete刪除屬性從而從新定義屬性,可否修改屬性的特性,可否把屬性修改成訪問器屬性。

Enumerable:可否經過for-in循環返回屬性。

Writable:可否修改屬性值。

Value:保持這個屬性的數據值。

var Person = {

        name: "yangxunwu",

}

Object.defineProperty(Person, "age", {

        writable: false,

        value: 24

})

    定義一個Person對象,並設置一個不可寫的值爲24的age屬性。注意定義屬性時的屬性字符串形式。當把屬性的configurable特性設置爲false時,沒法在次修改,只能使用writable。

訪問器屬性:    訪問器屬性不包含值,包含一對getter和setter函數,訪問訪問器屬性時調用getter函數,這個函數返回有效的值,寫入訪問器屬性時調用setter函數,並傳入新值。訪問器屬性包含四個特性:

    Configurable:可否經過delete刪除屬性從而從新定義屬性,可否修改屬性的特性,可否把屬性修改成數據屬性。

Enumerable:可否經過for-in循環返回屬性。

Get:讀取數據時調用的函數。默認undefined

Set:寫入屬性時調用的函數。默認undefined

var Person = {

_year : 1992,

age : 0

}

 

Object.defineProperty(Person, "year", {

get: function(){

     return this._year;

},

 

set: function(newValue){

if(newValue > 1992){

     this._year = newValue;

this.age = newValue - 1992;

}

}

})

    

給Person對象,定義了一個訪問器屬性year,訪問時返回對象的__year屬性,賦值時會調用set函數,而後同時設置age的值。

部分瀏覽器也能夠經過_defineGetter__和 __defineSetter__來設置訪問器特性。也能夠設置多個特性Object.defineProperties()。要讀取一個屬性的特性,能夠經過給定屬性的描述符。

    Object.getOwnPropertyDescriptor()方法,返回一個對象,包含各類特性的屬性,能夠針對BOM和DOM對象來使用。

    ECMAScript定義這些特性的目的是爲了實現Javascript引擎用的

相關文章
相關標籤/搜索