要獲取屬性屬性,請使用Object.getOwnPropertyDescriptor()。
此方法僅適用于自己的屬性。
此方法接受兩個參數(shù):要處理的對象和要檢索的屬性名稱。
如果屬性存在,您應(yīng)該接收一個描述符對象有四個屬性:可配置,可枚舉,并且兩個其他適合于屬性的類型。
例如,以下代碼創(chuàng)建一個屬性并檢查其屬性:
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é)果。
上面的代碼生成以下結(jié)果。...
[[Extensible]]屬性是一個布爾值,指示對象本身是否可以修改。
我們創(chuàng)建的所有對象默認(rèn)都是可擴(kuò)展的,這意味著可以在任何時候向?qū)ο筇砑有聦傩浴?/p>
通過將[[Extensible]]設(shè)置為false,我們可以防止新的屬性添加到對象。
有三種不同的方法來完成這個。
創(chuàng)建不可擴(kuò)展對象的一種方法是使用Object.preventExtensions()方法。
創(chuàng)建不可擴(kuò)展對象的一種方法是使用Object.preventExtensions()方法。...
在對象上使用這個方法后,我們永遠(yuǎn)不會再次向其中添加任何新屬性。
我們可以使用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ò)展對象添加屬性將在strict中拋出錯誤模式。
在非嚴(yán)格模式下,操作失敗。
創(chuàng)建不可擴(kuò)展對象的第二種方式是密封對象。
密封對象不可擴(kuò)展,其所有屬性都是不可配置的。
我們不能向?qū)ο筇砑有聦傩?,我們不能刪除屬性或更改其類型。
如果對象被密封,您只能讀取和寫入其屬性。
我們可以在對象上使用Object.seal()方法來封裝它。
調(diào)用Object.seal()方法后,[[Extensible]]屬性設(shè)置為false,并且所有屬性的[[Configurable]]屬性設(shè)置為false。
我們可以使用Object.isSealed()來檢查對象是否被密封,如下所示:
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é)果。...
創(chuàng)建不可擴(kuò)展對象的最后一種方法是凍結(jié)它。
創(chuàng)建不可擴(kuò)展對象的最后一種方法是凍結(jié)它。...
凍結(jié)對象是一個密封對象,其中數(shù)據(jù)屬性也是只讀的。
冷凍物品凍結(jié)后不能凍結(jié)。
我們可以通過使用Object.freeze()來凍結(jié)對象,并確定是否通過使用Object.isFrozen()凍結(jié)對象。
例如:
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é)果。
更多建議: