面向對象精要-理解對象
1、創建對象
創建對象的兩種方法:
使用Object構造函數
var person2 = new Object(); person2.name="Qian";
使用對象的字面形式
var person1={ name:"Qian" };
對象添加以及修改時JavaScript會在對象上調用[[Put]]和[[Set]]方法
2、屬性探測
2.1、使用“in”操作符
console.log("name" in person1)/*true*/
2.2、使用“hasOwnProperty()”方法
console.log(person1.hasOwnProperty("name"))/*true*/
3、刪除屬性
var person1={ name:"Qian" }; delete person1.name; console.log(person1.hasOwnProperty("name"))/*false*/
4、枚舉屬性
for-in:可枚舉屬性的內部特征都被設置為true,for-in循環會枚舉一個對象所有的可沒經驗屬性並將屬性名賦給一個變量
var person1 = { name:"Qian", age:12 } for(var item in person1){ console.log(item)/*name age*/ }
Object.keys():獲取一個對象的屬性列表已備程序使用
var person1 = { name:"Qian", age:12 }; var properties = Object.keys(person1); for(var i=0;i<properties.length;i++){ console.log(i) }
5、屬性類型
數據屬性:包含一個值
訪問器屬性:包含一個函數
6、屬性特征
通用特征:
是否可遍歷:[[Enumerable]]
是否可配置:[[Configurable]]---------->可以用delete刪除
修改屬性特征:Object.defineProperty()方法
例:修改某個對象屬性使其變成不可以枚舉且不可配置
Object.defineProperty(person1,"name",{ enumerable:false, configurable:false }); console.log(person1.propertyIsEnumerable("name"))/*false*/
數據屬性特征:
[[Value]]:創建對象時該特征自動賦值
[[Writable]]:布爾值,默認可以寫
定義完整的數據屬性:Object.defineProperty()
var person1 = {} Object.defineProperty(person1,"name",{ value:"Qian", enumerable:true, configurable:true, writable:true })
訪問器屬性特征:
[[Get]]
[[Set]]
定義多重屬性
Object.defieProperties()方法
var person1 = {} Object.defineProperties(person1, { _name:{ value: "Qian", enumerable: true, configurable: true, writable: true }, name:{ get:function () { console.log("Reading me") } } })
獲取屬性特征:
Object.getOwnPropertyDescriptor()方法
var person1 = { name:"Qian" } var deseciptor = Object.getOwnPropertyDescriptor(person1,"name"); console.log(deseciptor.enumerable)/*true*/
7、禁止修改對象
[[Extensible]]:布爾值,設置為false,禁止新屬性的添加
7.1、禁止擴展
方法:使用Object.preventExtensions()
檢測方法:使用Object.isExtensible()
var person1 = { name:"Qian" } Object.preventExtensions(person1); console.log(Object.isExtensible(person1))/*false*/
7.2、封印對象
方法:Object.seal()
檢測方法:使用Object.isSealed()
var person1 = { name:"Qian" }; Object.seal(person1); console.log(Object.isSealed(person1))/*true*/
7.3、凍結對象
方法:Object.freeze()
檢測方法:Object.isFrozen()
var person1 = { name:"Qian" }; Object.freeze(person1); console.log(Object.isFrozen(person1))/*true*/
總結:
1、將屬性視為鍵值對,對象視為屬性的哈希表有助於理解JavaScript對象。
2、你可以用點好或者中括號訪問對象的屬性
3、用in操作符檢測某個屬性是否存在
4、屬性的兩種類型:數據屬性和訪問器屬性
5、屬性的特征
6、鎖定對象的3中方式
面向對象精要-理解對象