面向對象(一):對象屬性

對象屬性類型

每個對象都是基於一個引用類型創建的

1. 數據屬性

2. 訪問器屬性


【數據屬性】

4個特性:

1. [[Configurable]]:能否delete屬性從而重新定義屬性、能否修改屬性的特性、能否把屬性改爲訪問器屬性
2. [[Enumerable]]:能否用for-in循環返回屬性
3. [[Writable]]:能否修改屬性的值
4. [[Value]]:包含該屬性的值

**已經在對象上直接定義的屬性,其[[Confgurable]]、[[Enumerable]]、[[Writable]]默認值爲true,
[[Value]]默認值爲undefined

**通過Object.defineProperty()方法創建一個新屬性時,其[[Confgurable]]、[[Enumerable]]、
[[Writable]]默認值爲false。

修改屬性默認特性的方法:

Object.defineProperty(屬性所屬對象,“屬性名”,{
                    要修改的特性1:修改值,
                    要修改的特性2:修改值,
                    ……
                    });
**需要注意的是,一旦把configurable修改爲false,就再也不能修改該屬性的特性(除了writable,可以由true改爲false,但不能由false
改爲true);
**當configurable修改爲false時,包括configurable本身也不能改爲true;
**當configurable修改爲false時,該屬性會被禁止刪除
var person = {};
Object.defineProperty(person,"name",{
    configurable: false,
    value: "karine"
});
console.log(person.name); //karine

【訪問器屬性】

4個特性:

1. [[Configurable]]:能否delete屬性從而重新定義屬性、能否修改屬性的特性、能否把屬性改爲訪問器屬性。
默認值爲false
2. [[Enumerable]]:能否用for-in循環返回屬性。默認值爲false
3. [[Get]]:讀取屬性時調用的函數。默認值爲undefined
4. [[Set]]:寫入屬性時調用的函數。默認值爲undefined

訪問器屬性不能直接在對象上定義,必須Object.defineProperty(屬性所屬對象,“屬性名”,{
                                    要定義的特性1:值,
                                    要定義的特性2:值,
                                    ……
                                    });
                               舊方法:
                                    對象名.__defineGetter__(“屬性名”,function(){
                                        …;});
                                    對象名.__defineSetter__(“屬性名”,function(){
                                        …;});

定義對象的屬性:

1. 一個屬性

        Object.defineProperty(屬性所屬對象名,“屬性名”,{
                                特性1:……,
                                特性2:……,
                                ……
                                    });

2. 多個屬性

        Object.defineProperties(對象名,{
                                屬性1:{
                                    特性1: …,
                                    特性2: …,
                                    …
                                    },
                                屬性2:{
                                    特性1: …,
                                    特性2: …,
                                    …
                                    }
                                });

讀取對象的屬性特性

1. var descriptor = Object.getOwnPropertyDescriptor(對象名,"屬性名"); //返回一個對象
   descriptor.特性;
2. Object.getOwnPropertyDescriptor(實例名,“屬性名”)//取得實例屬性的屬性特性
3. Object.getOwnPropertyDescriptor(構造函數名.prototype, "屬性名")//取得原型屬性的屬性特性
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章