Javascript屬性屬性

2018-01-06 19:14 更新

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


檢索屬性屬性

要獲取屬性屬性,請(qǐng)使用Object.getOwnPropertyDescriptor()。

此方法僅適用于自己的屬性。

此方法接受兩個(gè)參數(shù):要處理的對(duì)象和要檢索的屬性名稱。

如果屬性存在,您應(yīng)該接收一個(gè)描述符對(duì)象有四個(gè)屬性:可配置,可枚舉,并且兩個(gè)其他適合于屬性的類型。

例如,以下代碼創(chuàng)建一個(gè)屬性并檢查其屬性:


var book1 = { 
    name : "Javascript" 
}; // w  ww. j  a va2 s  . c  o m

var descriptor = Object.getOwnPropertyDescriptor(book1, "name"); 

console.log(descriptor.enumerable);     // true 
console.log(descriptor.configurable);   // true 
console.log(descriptor.writable);       // true 
console.log(descriptor.value);          // "Javascript" 

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



防止對(duì)象修改

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

[[Extensible]]屬性是一個(gè)布爾值,指示對(duì)象本身是否可以修改。

我們創(chuàng)建的所有對(duì)象默認(rèn)都是可擴(kuò)展的,這意味著可以在任何時(shí)候向?qū)ο筇砑有聦傩浴?/p>

通過將[[Extensible]]設(shè)置為false,我們可以防止新的屬性添加到對(duì)象。

有三種不同的方法來完成這個(gè)。

防止擴(kuò)展

創(chuàng)建不可擴(kuò)展對(duì)象的一種方法是使用Object.preventExtensions()方法。

創(chuàng)建不可擴(kuò)展對(duì)象的一種方法是使用Object.preventExtensions()方法。...

在對(duì)象上使用這個(gè)方法后,我們永遠(yuǎn)不會(huì)再次向其中添加任何新屬性。

我們可以使用Object.isExtensible()檢查[[Extensible]]的值。

我們可以使用Object.isExtensible()檢查[[Extensible]]的值。...


var book1 = { 
    name : "Javascript" 
}; /* w ww  .ja v  a 2s.  c  om*/

console.log(Object.isExtensible(book1));      // true 

Object.preventExtensions(book1); 
console.log(Object.isExtensible(book1));      // false 

book1.writeLine = function() { 
     console.log(this.name); 
}; 

console.log("writeLine" in book1);              // false 

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

嘗試向不可擴(kuò)展對(duì)象添加屬性將在strict中拋出錯(cuò)誤模式。

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



密封對(duì)象

創(chuàng)建不可擴(kuò)展對(duì)象的第二種方式是密封對(duì)象。

密封對(duì)象不可擴(kuò)展,其所有屬性都是不可配置的。

我們不能向?qū)ο筇砑有聦傩?,我們不能刪除屬性或更改其類型。

如果對(duì)象被密封,您只能讀取和寫入其屬性。

我們可以在對(duì)象上使用Object.seal()方法來封裝它。

調(diào)用Object.seal()方法后,[[Extensible]]屬性設(shè)置為false,并且所有屬性的[[Configurable]]屬性設(shè)置為false。

我們可以使用Object.isSealed()來檢查對(duì)象是否被密封,如下所示:


var book1 = { 
    name : "Javascript" 
}; // w w  w.  j  a v a 2  s. c o  m

console.log(Object.isExtensible(book1));      // true 
console.log(Object.isSealed(book1));          // false 

Object.seal(book1); 
console.log(Object.isExtensible(book1));      // false 
console.log(Object.isSealed(book1));          // true 

book1.writeLine = function() { 
    console.log(this.name); 
}; 

console.log("writeLine" in book1);              // false 

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

delete book1.name; 
console.log("name" in book1);                 // true 
console.log(book1.name);                      // "CSS" 

var descriptor = Object.getOwnPropertyDescriptor(book1, "name"); 
console.log(descriptor.configurable);           // false 

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

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

凍結(jié)對(duì)象

創(chuàng)建不可擴(kuò)展對(duì)象的最后一種方法是凍結(jié)它。

創(chuàng)建不可擴(kuò)展對(duì)象的最后一種方法是凍結(jié)它。...

凍結(jié)對(duì)象是一個(gè)密封對(duì)象,其中數(shù)據(jù)屬性也是只讀的。

冷凍物品凍結(jié)后不能凍結(jié)。

我們可以通過使用Object.freeze()來凍結(jié)對(duì)象,并確定是否通過使用Object.isFrozen()凍結(jié)對(duì)象。

例如:


var book1 = { 
    name : "Javascript" 
}; /* w  w w  .ja  v a  2s  .co  m*/

console.log(Object.isExtensible(book1));      // true 
console.log(Object.isSealed(book1));          // false 
console.log(Object.isFrozen(book1));          // false 

Object.freeze(book1); 
console.log(Object.isExtensible(book1));      // false 
console.log(Object.isSealed(book1));          // true 
console.log(Object.isFrozen(book1));          // true 

book1.writeLine = function() { 
    console.log(this.name); 
}; 

console.log("writeLine" in book1);              // false 

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

delete book1.name; 
console.log("name" in book1);                 // true 
console.log(book1.name);                      // "Javascript" 

var descriptor = Object.getOwnPropertyDescriptor(book1, "name"); 
console.log(descriptor.configurable);           // false 
console.log(descriptor.writable);               // false 

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

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

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)