Javascript 屬性類型

2018-01-12 19:44 更新

Javascript面向?qū)ο笤O(shè)計(jì) - Javascript屬性類型


有兩種不同類型的屬性:數(shù)據(jù)屬性和訪問器屬性。

數(shù)據(jù)屬性包含一個值,如book1的name屬性。

訪問器屬性不包含值。

訪問器屬性只需要一個getter或setter。

有一種特殊的語法來使用對象字面量來定義訪問器屬性:

var book1 = { 
   _name : "Javascript", 
/*  o2fo.com*/
   get name() { 
        console.log("Reading name"); 
        return this._name; 
    }, 
   set name(value) { 
        console.log("Setting name to %s", value); 
        this._name = value; 
    } 
}; 

console.log(book1.name); 

book1.name = "CSS"; 
console.log(book1.name); 

上面的代碼生成以下結(jié)果。

在訪問器屬性名稱之前使用特殊關(guān)鍵字 get set 。

Getters應(yīng)該返回一個值。
設(shè)置器接收分配給屬性的值作為參數(shù)。
我們不需要定義getter和setter,我們可以選擇一個或兩個。
如果只定義一個getter,那么該屬性將變?yōu)橹蛔x,并且嘗試寫入該屬性將在nonstrict模式下靜默失敗,并在嚴(yán)格模式下拋出一個錯誤。
如果僅定義setter,那么屬性將變?yōu)橹粚?,并且嘗試讀取該值將在嚴(yán)格和非嚴(yán)格模式下靜默失敗。


屬性

Javascript可以直接與屬性屬性交互。
我們可以添加新屬性以支持其他功能。
我們可以創(chuàng)建表現(xiàn)與內(nèi)置JavaScript屬性相同的屬性。

公共屬性

在數(shù)據(jù)和訪問器之間共享兩個屬性屬性屬性。

一個是[[Enumerable]],它決定是否可以迭代。

另一個是[[Configurable]],它確定屬性是否可以更改。

我們可以使用 delete 刪除可配置屬性并可以隨時更改其屬性。

默認(rèn)情況下,我們在對象上聲明的所有屬性都是可枚舉和可配置的。

我們可以使用 defineProperty 方法來更改 [[Enumerable]] [[Configurable]] 。

var book1 = { 
   name : "Javascript" 
}; 

Object.defineProperty(book1, "name", { 
   enumerable : false 
}); 

console.log("name" in book1);                      // true 
console.log(book1.propertyIsEnumerable("name"));   // false 

var properties = Object.keys(book1); 
console.log(properties.length);                      // 0 

Object.defineProperty(book1, "name", { 
    configurable : false 
}); 

// try to delete the Property 
delete book1.name; 
console.log("name" in book1);                      // true 
console.log(book1.name);                           // "Javascript" 

//Object.defineProperty(book1, "name", {           // error!!! 
//    configurable : true 
//}); 

上面的代碼生成以下結(jié)果。

當(dāng)JavaScript以嚴(yán)格模式運(yùn)行時,嘗試刪除不可配置的屬性導(dǎo)致錯誤。

在非嚴(yán)格模式下,操作會靜默失敗。



以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號