1. 程式人生 > >面向對象精要-理解對象

面向對象精要-理解對象

style 封印 擴展 des val ole 特征 對象 npr

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中方式

面向對象精要-理解對象