javascript中物件的屬性的特性

2021-08-13 02:23:30 字數 3805 閱讀 6743

configurable: 表示能否通過delete來刪除屬性從而重新定義屬性,能夠修改屬性的特性,預設為true

enumberable: 表示是否能通過for-in迴圈返回屬性。預設為true

writable: 是否可以修改屬性, 預設為true

value: 包含這個屬性的資料值。讀取屬性值時3,從這個屬性讀,寫入屬性時,把新值儲存到這個位置。預設值為undefine.

getter: 在讀取屬性時,呼叫的函式

setter: 在寫入屬性時呼叫的函式

特別注意:一旦呼叫了object.defineproperty方法之後,那些未定義的特性值除了configurable為false之外,其他都為undefined;

必須使用object.defineproperty()方法。這個方法接受3個引數: 屬性所在的物件,屬性的名字,和乙個描述符物件。其中描述符物件的屬性必須是:configurable, enumberable, writable,value.設定其中乙個或者多個值,可以修改對應的特性值。

修改writable特性,設定為false從而使得屬性值不可修改,如下所示:

重點內容

var person = {};

object.defineproperty(person, "name", );

person.name = "jany"; //試圖把name屬性值設定為jany,但是失敗了.非嚴格模式下會忽略此語句,嚴格模式則會報錯的

console.log(person.name); //結果仍然為tom

將person設定了name屬性的值為tom,並且把它的writable特性設定為false,然後,我們試圖把它改jany,但是,最終列印出來的結果仍然是tom。

修改configurabel特性,設定為false使得屬性無法被delete(刪除),如下所示:

var person = {};

object.defineproperty(person, "name", );

console.log(person.name); //列印結果為tom

delete person.name; //試圖刪除name屬性

console.log(person.name); //但是name仍然存在,列印出tom

如果我們把configurable屬性值改為true,則屬性可以被delete

var person = {};

object.defineproperty(person, "name", );

console.log(person.name); //列印出tom

delete person.name; //試圖刪除name屬性

console.log(person.name); //刪除成功,列印出udefined

另外,一旦,我們我們把某個屬性的特性設定成了不可配置的,就再也不能把它變回可配置的了。此時,呼叫object.defineproperty()方法修改除了writable之外的特性都會報錯。

如下:

var person = {};

//把person.name屬性的configurable設定為false;

object.defineproperty(person, "name", );

//然後試圖重新把person.name屬性的configurable設定為true;但是瀏覽器出現報錯資訊。

object.defineproperty(person, "name", );

console.log(person.name);

瀏覽器會報錯資訊

//定義乙個物件book

var book = ;

//定義year屬性的特性

object.defineproperty(book, "year", ,

//重寫了set方法,每當對book.year進行賦值時,則相應的修改book._year和book.edition的值

set: function

(newvalue)

}});

book.year = 2005;

console.log(book.edition); //2

由於定義多個屬性的可能性很大,因此es5有定義乙個object.defineproperties方法。利用這個方法可以通過描述符一次定義多個屬性。這個方法接受兩個物件的引數;第乙個物件是要新增和修改器屬性的物件,第二個物件的屬性與第乙個物件中要新增或者修改的順序一一對應。

var book = {};

object.defineproperties(book, ,

// 定義乙個新的屬性edition,並且他的預設值是1,而且屬性值是可修改的

edition: ,

// 定義乙個新的屬性year,並且重寫了他的get和set方法

year: ,

set: function

(newvalue)

}}});

book.year = 2006;

console.log(book.edition);//3

讀取屬性的特性,使用object.getownpropertydescriptor方法

var book = {};

// 為該物件定義一些屬性

object.defineproperties(book, ,

edition: ,

year: ,

set: function(newvalue)

}}});

//獲取_year屬性的特性

var descriptor1 = object.getownpropertydescriptor(book, "_year");

console.

log(descriptor1.configurable); //false

console.

log(descriptor1.enumberable); //undefinded

console.

log(descriptor1.writable); //false

console.

log(descriptor1.value); //2004

console.

log(descriptor1.get); //undefined

console.

log(descriptor1.

set); //undefined

console.

log("\n");

//獲取year屬性的特性

var descriptor2 = object.getownpropertydescriptor(book, "year");

console.

log(descriptor2.configurable); //false

console.

log(descriptor2.enumberable); //undefined

console.

log(descriptor2.writable); //undefined

console.

log(descriptor2.value); //undefined

console.

log(descriptor2.get); //function()

console.

log(descriptor2.

set); //function(value)

JavaScript事件event物件屬性

ie和ff獲取事件的不同 var e window.event e.target event 物件只在事件發生的過程中才有效。阻止事件預設行為 ie window.event.returnvalue true ff e.preventdefault 阻止事件冒泡行為 ie window.event....

JavaScript 判斷物件中是否有某屬性

通過點或者方括號可以獲取物件的屬性值,如果物件上不存在該屬性,則會返回undefined。當然,這裡的 不存在 指的是物件自身和原型鏈上都不存在,如果原型鏈有該屬性,則會返回原型鏈上的屬性值。建立物件 let test 獲取物件的自身的屬性 test.name lei test name lei 獲...

JavaScript中的物件

物件的實質是一組名值對,其中值可以為資料或函式。當值為資料時,對應的名被稱為物件的屬性 當值為函式時,對應的名被稱為物件的方法。通過object 類建立物件let person new object person.name guagua person.age 18 person.say functi...