物件是無序屬性的集合
建立屬性object.defineproperty()
如果物件中不存在指定的屬性,object.defineproperty()就建立這個屬性。當描述符中省略某些欄位時,這些欄位將使用它們的預設值。擁有布林值的字段的預設值都是false。value,get和set欄位的預設值為undefined。乙個沒有get/set/value/writable定義的屬性被稱為「通用的」,並被「鍵入」為乙個資料描述符。
資料屬性
和訪問器屬性
資料屬性
[[要修改屬性預設的特性,必須使用object.defineproperty()方法。這個方法接受三個引數:屬性所在的物件,屬性的名字,描述符物件(必須是configurable,enumerable,writable和value)。configurable
]]表示能否通過delete刪除屬性從而重新定義屬性,能否修改屬性的特性,或者能否把屬性修改為訪問器屬。直接在物件上定義的屬性,預設值true
。[[
writeble
]]預設值true
[[
enumerable
]]表示能否通過for-in迴圈返回屬性。直接在物件上定義的屬性,預設值true
。[[
writable
]]表示能否修改屬性的值,直接在物件上定義的屬性,預設值true
。[[
value
]]包含這個屬性的資料值\
一旦將configurable設定為false,表示不能從物件中刪除屬性,不能再把configurable設定為true。修改除writable之外的特性都會導致錯誤。var person = {};
object.defineproperty(person, "name", );
//nicholas
console.
log(person.name);
//非嚴格模式,賦值被忽略,嚴格模式下,賦值操作拋錯
person.name =
"xiaohong";
//nicholas
console.
log(person.name);
object
.defineproperty(person, "name", );
object
.defineproperty(person, "name", );
訪問器屬性
訪問器屬性不包含資料值;包含一對getter和setter函式。在讀取物件的某個屬性時,會呼叫這個屬性的getter函式。在修改物件的某個屬性時,會呼叫這個屬性的setter函式。
訪問器屬性有如下4個特性:
[[configurable
]]:表示能否通過 delete 刪除屬性從而重新定義屬性,能否修改屬性的特性,或者能否把屬性修改為資料屬性。
[[enumerable
]]:表示能否通過 for-in 迴圈返回屬性。
[[get
]]:在讀取屬性時呼叫的函式。預設值為 undefined。
[[set
]]:在寫入屬性時呼叫的函式。預設值為 undefined。訪問器屬性不能直接定義,必須使用 object.defineproperty() 來定義。
訪問器屬性常用於:設定乙個屬性值導致另乙個屬性值的變化。
只指定getter,屬性不能寫,在非嚴格模式下賦值會被忽略,嚴格模式下回拋錯。
只指定setter,屬性不能寫,在非嚴格模式下返回undefined,嚴格模式下回拋錯。
object.defineproperty()
定義多個屬性
object.getownpropertydescriptor()
接收兩個引數: 1 屬性所在的物件, 2 要讀取的描述符的屬性名稱
返回: 乙個物件
如果是資料屬性,這個物件有屬性有,configurable, enumerable,writable,value
如果是訪問器屬性,這個物件有屬性有,configurable, enumerable,get,set
var book = {};
object.defineproperties(book, ,
建立資料屬性
edition: ,
//建立訪問屬性
year: ,
set: function
(newvalue) }}
});//讀取資料屬性
var descriptor = object.getownpropertydescriptor(book, "_year");
console.log(descriptor.value);//2004
console.log(descriptor.configurable);//false
console.log(descriptor.get);//undefined
//讀取訪問屬性
var descriptor = object.getownpropertydescriptor(book, "year");
console.log(descriptor.value);//undefined
console.log(descriptor.configurable);//false
console.log(typeof descriptor.get);//function
console.log(descriptor.enumerable);//false
JS學習筆記 物件導向
類 物件 類 模子 物件 產品 成品 蛋糕 物件 模子 類 array 類 arr 物件 array.push 錯 arr.push 對 new arr 錯 原型prototype 是加到類上面,而不是物件。混合方式構造物件 方法都是相同的,屬性都是不同的。方法 函式 屬性 變數 用 建構函式 加 ...
03學習 JS物件導向筆記
1.原型 prototypr 原型屬性 2.繼承 3.原型鏈 prototypr 原型屬性 constructor 建構函式 prototypr 原型屬性 為什麼使用原型?原型可以達到繼承的目的 function person person.prototype.name shaozhu person...
JS學習筆記 物件導向基礎
今天溫習了js的物件導向的知識,對這方面的知識做一次總結。首先是要理解物件和類。物件可以理解為乙個具體的實物,比如乙個人。而人有吃飯 睡覺等特性,把具有相同特性的物件進行分類,例如人類。物件和類的關係就是物件是類中某一具體的個體,類是許多具有相同特徵物件的抽象。物件由屬性和方法組成,通常在程式設計中...