翻譯|使用教程|編輯:李爽夏|2019-01-03 10:05:29.000|閱讀 315 次
概述:本文介紹了如何在javascript中密封、凍結和防止對象擴展。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關鏈接:
【下載Infragistics Ultimate最新版本】
在現代的JavaScript中,對象是不可分割的,對對象周圍的主題有很強的理解是編寫更好的JavaScript所必需的。您可以用JavaScript以四種方式創建對象。
一旦知道如何創建對象,您可能希望了解對象屬性描述符。綜上所述,假設您有一個對象——cat:
var cat = { name: 'foo', age: 9 }
每個對象屬性包含的信息不僅僅是一個值。例如,可以使用object.getownPropertyDescriptor方法打印其他屬性信息。
console.log(Object.getOwnPropertyDescriptor(cat, 'name'));
在控制臺上,可以看到屬性名提供了更多信息:
很明顯,如果將writable設置為true,則可以重寫屬性值等。您可以在此處閱讀有關javascript對象屬性描述符的更多信息。
到目前為止,您已經了解了對象屬性描述符,因此如果需要將屬性設置為只讀,您將把該屬性設置為可寫。
Object.defineProperty(cat, 'name', { writable: false });
下一步,讓我們討論一下更改JavaScript對象默認行為的更多要求。
防止對象具有新屬性
除要求1外,將所有可配置的屬性標記為假
除了要求2之外,還應使所有屬性都可寫為false
從ECMA 6開始,您有實現上述要求的方法。讓我們一個接一個地拿著:
Object.preventExtensions
比如說,你有一個對象——cat:
var cat = { name: 'foo', age: 9 }
使用默認行為,您可以向JavaScript對象添加屬性。因此,可以進行以下操作:
cat.color = 'black'; console.log(cat.color); // black
要防止默認行為在對象中動態添加屬性,需要使用object.preventextensions()。此方法阻止對象添加新屬性。
Object.preventExtensions(cat); cat.color = 'black'; console.log(cat.color); // undefined
在對象上使用object.preventextensions之后,如果添加新的屬性顏色,javascript將忽略它,并且作為輸出,您將得到未定義的。
如果javascript處于嚴格模式,則如果向不可擴展的對象添加新屬性,則會出現錯誤。
'use strict' var cat = { name: 'foo', age: 9 } Object.preventExtensions(cat); cat.color = 'black'; console.log(cat.color); // error thrown
在嚴格模式下,您將收到一個錯誤,消息傳遞非常清楚,即“cannot add property, object is not extensible”
總而言之,您應該使用object.preventextensions方法來防止向對象添加新屬性。
假設你想封一個物體,意思是:
可以使用object.seal()方法密封對象。讓我們再次考慮一個對象——cat:
var cat = { name: 'foo', age: 9 }
您不希望將新屬性添加到cat中,并且所有屬性的可配置性都應設置為false。可以使用object.seal()方法執行此操作:
Object.seal(cat); cat.color = 'black'; console.log(cat.color); // undefined console.log(Object.getOwnPropertyDescriptor(cat, 'name'));
因為您有一個密封的對象作為輸出,所以您將得到未定義和可配置的設置為false。
總而言之,應該使用object.seal()來密封對象。您將無法添加新屬性,并且將配置設置為“false”。
假設你想凍結一個物體,意思是:
可以使用object.freeze()方法凍結對象。它本質上調用object.seal()方法,并將可寫屬性設置為false。
讓我們考慮一個對象——cat:
var cat = { name: 'foo', age: 9 }
不應將新屬性添加到對象中,所有屬性的可配置性應設置為false,屬性的可寫性應設置為false。可以使用object.freeze()方法執行此操作:
Object.freeze(cat); cat.age = 10; cat.color = 'black'; console.log(cat.age); //9 console.log(cat.color); // undefined console.log(Object.getOwnPropertyDescriptor(cat, 'name'));
由于您已經凍結了對象,作為輸出,您將得到未定義、9和可配置和可寫設置為false。
總而言之,應該使用object.freeze()凍結對象。一旦凍結對象,就不能添加新屬性或重寫屬性值,而configurable將設置為false。
在使用JavaScript中的對象時,您需要對創建對象的不同方法有很強的理解。非常需要屬性描述符、object.seal、object.preventextensions和object.freeze。希望你現在能更好地理解這些概念。
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn