標籤:log 進階程式設計 undefined 訪問 javascrip 返回 var property str
以下為JavaScript進階程式設計第六章物件導向的程式設計讀書筆記記錄。
對象存在兩個屬性: 資料屬性/ 訪問器屬性。
資料屬性包括四個值: Configurable: 預設值為true, 表示能否通過delete刪除屬性重新定義;能否修改屬性特性,或者能否吧屬性修改為訪問器屬性。
Enumable: 表示能否通過for in迴圈返回屬性。預設值為true。
writable: 表示能否修改屬性,預設值為true。
Value:包含這個屬性的資料值。
訪問器屬性包括四個值:Configurable: 預設值為true, 表示能否通過delete刪除屬性重新定義屬性;能否修改屬性特性,或能否修改為資料屬性。
Enumable: 表示能否通過for in迴圈返回屬性, 預設值為true。
Get: 在讀取屬性時調用的函數,預設值為undefined.
Set: 在寫入屬性時調用的函數,預設值為undefined。
其中涉及到Object.defineProperty()/Object.defineProperties()/Object.getOwnPropertyDescriptor()等方法。
object.defineProperty(), 傳入三個值,第一個為定義屬性的對象,第二個為定義屬性的對象屬性,第三個為屬性描述符。如下:
var obj = {};
Object.defineProperty(obj, ‘name‘, {value: ‘Tom‘});
object.defineProperties(), 傳入兩個值,可定義多個屬性特性,第一個為定義屬性的對象,第二個為定義屬性特性的屬性健值對,如下:
var obj = {};
Object.defineProperties(obj, {
_year: { value: 123}, // 屬性添加‘_’首碼,表示該屬性只能通過對象的訪問器屬性進行訪問,即get()/set()方法。
name: {value: ‘Tom‘},
year: {
get: function(){
return this._year;
}
}
});
Object.getOwnPropertyDesciptor(), 表示擷取某個屬性的描述符(該資料屬性或訪問器屬性),該方法傳入兩個參數,第一個表示屬性所在的對象,第二個表示描述符的屬性名稱,傳回值為一個對象。如下:
引用上述定義的obj對象,調用Object.getOwnPropertyDescrptor().
var descriptor = Object.getOwnPropertyDescriptor(obj, _year);
console.log(descriptor.value); // 輸出123
console.log(descriptor.get); // 輸出undefined
var descriptor2 = Object.getOwnPropertyDescriptor(obj, year);
console.log(descriptor.value); // 輸出undefined
console.log(descriptor.get); // 輸出function
JavaScript 物件導向的程式設計記錄筆記