理解物件
建立自定義物件的最簡單方式就是建立乙個object的例項,然後再為它新增屬性和方法
1var person = new
object();
2 person.name = "nicholas";
3 person.age = 29;
4 person.job = "software engineer";
5 person.sayname = function
();
建立物件的首選模式是物件字面量方式
1var person =
8 };
屬性型別
資料屬性包含乙個資料值的位置。在這個位置可以讀取和寫入值。資料屬性有4個描述其行為的特性
[[configurable]]:表示能否通過delete輸出屬性從而定義屬性,能否修改屬性的特性,或者能否把屬性修改為訪問器屬性,預設值為true
[[enumerable]]:表示能否通過for-in迴圈返回屬性,預設值為true
[[writable]]:表示能否通過修改屬性的值,預設值為true
[[value]]:包含這個屬性的資料值,讀取屬性值的時候,從這個位置讀;寫入屬性值的時候,把新值儲存在這個位置
要修改屬性預設的特性,必須使用ecmascript5的object.defineproperty()這個方法.這個方法接受三個引數:
屬性所在的物件、屬性的名字和乙個描述符物件
1var person ={};
2 object.defineproperty(person,"name",);
67 console.log(person.name); //
" nicholas"
8 person.name = "oreg";
9 console.log(person.name); //
" nicholas"
把donfigurable設定為false,表示不能從物件中刪除屬性。一旦把屬性定義為不可配置的,就不能再把它變回可配置的了。此時,在呼叫object.defineproperty()方法修改處writable之外的特性,都會導致錯誤
1var person ={};
2 object.defineproperty(person,"name",);67
//丟擲錯誤
8 object.defineproperty(person,"name",);
在呼叫object.defineproperty()方法時,如果不指定,configurable、enumerable和writable特性的預設值都是false
2、訪問器屬性
訪問器屬性不包含屬性值;他們包含一對兒getter和setter函式,在讀取訪問器屬性時,會呼叫setter函式,這個函式負責返回有效的值,在寫入訪問器屬性時,會呼叫getter函式,並傳入新值,這個函式決定如何處理資料。訪問器屬性有如下4個特性
[[configurable]]:表示能否通過delete輸出屬性從而定義屬性,能否修改屬性的特性,或者能否把屬性修改為訪問器屬性,預設值為true
[[enumerable]]:表示能否通過for-in迴圈返回屬性,預設值為true
[[get]]:在讀取屬性時呼叫的函式。預設值為undefined
[[set]]:在寫入屬性時呼叫的函式。預設值為undefined
訪問器屬性不能直接定義,必須使用object.defineproperty()來定義。
1var book =;
56 object.defineproperty(book,"year",,
10 set: function
(newvalue) 15}
16});
1718 book.year = 2005;
19 console.log(book.edition); //
2
這是使用訪問器的常見方式,即設定乙個屬性的值會導致其他屬性發生變化,year前面的下劃線是一種
常用的記號,用於表示只能通過物件方法訪問的屬性
不一定非要同時指定getter和setter。只指定getter意味著屬性是不能寫的,只指定setter函式的屬性
也不能讀
兩個非標準的方法:__definegetter__()和__definesetter__()
1var book =;
56 book.__definegetter__("year",function
());
9 book.__definesetter__("yeat",function
(newvalue)
14});
1516 book.year = 2006;
17 console.log(book.year);
定義多個屬性
1var book ={};23
object.defineproperties(book,,
7edition: ,
10year: ,
14 set: function
(newvalue)19}
20}21 });
讀取屬性的特性
1object.getownpropertydescriptor()方法,可以取得給定屬性的描述符23
var book ={};45
object.defineproperties(book,,
9edition: ,
12year: ,
16 set: function
(newvalue)21}
22}23});
2425
var descriptor = object.getownpropertydescriptor(book,"_year");
26 console.log(descriptor.value); //
2004
27 console.log(descriptor.configurable); //
false
28 console.log(typeof descriptor.get); //
"underfined"
2930
var descriptor = object.getownpropertydescriptor(book,"year");
31 console.log(descriptor.value); //
underfined
32 console.log(descriptor.enumerable); //
false
33 console.log(typeof descriptor.get); //
"function"
物件導向 OO 的程式設計 理解物件
建立自定義物件的最簡單方法為建立 object 的例項,並新增屬性方法,也可以使用物件字面量 訪問器屬性包括 getter 和 setter 函式,讀取訪問器屬性時,呼叫 getter 函式,寫入訪問器屬性時,呼叫 setter 屬性 1 var people 56 object.definepro...
物件導向程式設計的理解
面向著具體的每乙個步驟和過程,把每乙個步驟和過程完成,然後由這些功能方法相互呼叫,完成需求。當需求單一,或者簡單時,我們一步一步去操作沒問題,並且效率也挺高。可隨著需求的更改,功能的增多,發現需要面對每乙個步驟很麻煩了,這時就開始思索,能不能把這些步驟和功能在進行封裝,封裝時根據不同的功能,進行不同...
8 理解物件導向程式設計
4.物件導向程式設計 object oriented programming,oop object oriented design,ood 什麼是物件導向?在物件導向程式設計中有兩個重要的概念 類 class 與物件 object 5.類 類是一種抽象的概念,類中包含了資料 通常使用名詞來表示 與對...