Baseline Widely available
ÐеÑод Object.freeze()
замоÑÐ°Ð¶Ð¸Ð²Ð°ÐµÑ Ð¾Ð±ÑекÑ: ÑÑо знаÑиÑ, ÑÑо он пÑедоÑвÑаÑÐ°ÐµÑ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ðµ новÑÑ
ÑвойÑÑв к обÑекÑÑ, Ñдаление ÑÑаÑÑÑ
ÑвойÑÑв из обÑекÑа и изменение ÑÑÑеÑÑвÑÑÑиÑ
ÑвойÑÑв или знаÑÐµÐ½Ð¸Ñ Ð¸Ñ
аÑÑибÑÑов пеÑеÑиÑлÑемоÑÑи, наÑÑÑаиваемоÑÑи и запиÑÑваемоÑÑи. Ð ÑÑÑноÑÑи, обÑÐµÐºÑ ÑÑановиÑÑÑ ÑÑÑекÑивно неизменнÑм. ÐеÑод возвÑаÑÐ°ÐµÑ Ð·Ð°Ð¼Ð¾ÑоженнÑй обÑекÑ.
obj
ÐбÑÐµÐºÑ Ð´Ð»Ñ Ð·Ð°Ð¼Ð¾Ñозки.
ÐамоÑоженнÑй обÑекÑ
ÐпиÑаниеРзамоÑÐ¾Ð¶ÐµÐ½Ð½Ð¾Ð¼Ñ Ð¾Ð±ÑекÑÑ Ð½ÐµÐ»ÑÐ·Ñ Ð´Ð¾Ð±Ð°Ð²Ð¸ÑÑ Ð½Ð¸ÐºÐ°ÐºÐ¸Ñ
ÑвойÑÑв, Ñак же как и ÑдалиÑÑ ÑвойÑÑва из замоÑоженного обÑекÑа. ÐÑбÑе попÑÑки ÑделаÑÑ ÑÑо поÑеÑпÑÑ Ð½ÐµÑдаÑÑ, либо молÑа, либо вÑбÑоÑив иÑклÑÑение TypeError
(как пÑавило, но не обÑзаÑелÑно, ÑÑо пÑоиÑÑ
Ð¾Ð´Ð¸Ñ Ð² ÑÑÑогом Ñежиме).
ÐнаÑÐµÐ½Ð¸Ñ ÑвойÑÑв-даннÑÑ Ð½Ðµ могÑÑ Ð±ÑÑÑ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ñ. СвойÑÑва-доÑÑÑÐ¿Ñ (геÑÑеÑÑ Ð¸ ÑеÑÑеÑÑ) ÑабоÑаÑÑ ÐºÐ°Ðº положено (и вÑÑ ÐµÑÑ ÑоздаÑÑ Ð¸Ð»Ð»ÑзиÑ, ÑÑо Ð²Ñ Ð¸Ð·Ð¼ÐµÐ½Ð¸Ð»Ð¸ знаÑение). ÐбÑаÑиÑе внимание, ÑÑо знаÑениÑ, ÑвлÑÑÑиеÑÑ Ð¾Ð±ÑекÑами, вÑÑ ÐµÑÑ Ð¼Ð¾Ð³ÑÑ Ð±ÑÑÑ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ñ, еÑли ÑолÑко они Ñак же не бÑли замоÑоженÑ.
ÐÑимеÑÑvar obj = {
prop: function () {},
foo: "bar",
};
// Ðожно добавлÑÑÑ Ð½Ð¾Ð²Ñе ÑвойÑÑва, ÑÑÑеÑÑвÑÑÑие ÑвойÑÑва можно изменÑÑÑ Ð¸Ð»Ð¸ ÑдалÑÑÑ
obj.foo = "baz";
obj.lumpy = "woof";
delete obj.prop;
// Ðба обÑекÑа ÑквиваленÑнÑ, а Ñакже возвÑаÑаемÑй обÑÐµÐºÑ Ð±ÑÐ´ÐµÑ Ð·Ð°Ð¼Ð¾Ñожен.
// ÐеобÑзаÑелÑно ÑоÑ
ÑанÑÑÑ Ð²Ð¾Ð·Ð²ÑаÑаемÑй обÑÐµÐºÑ Ð¿Ñи замоÑозке оÑигинала.
var o = Object.freeze(obj);
o === obj; // true
Object.isFrozen(obj); // === true;
// ТепеÑÑ Ð²Ñе Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð±ÑдÑÑ Ð·Ð°ÐºÐ°Ð½ÑиваÑÑÑÑ Ñ Ð¾Ñибкой
obj.foo = "quux"; // ÑиÑ
о ниÑего не делаеÑ
obj.quaxxor = "the friendly duck"; // ÑиÑ
о не добавлÑÐµÑ ÑвойÑÑво
// ...а в ÑÑÑогом Ñежиме Ñакие попÑÑки вÑзовÑÑ Ð²ÑбÑÐ¾Ñ Ð¸ÑклÑÑÐµÐ½Ð¸Ñ TypeError
function fail() {
"use strict";
obj.foo = "sparky"; // вÑбÑоÑÐ¸Ñ TypeError
delete obj.quaxxor; // вÑбÑоÑÐ¸Ñ TypeError
obj.sparky = "arf"; // вÑбÑоÑÐ¸Ñ TypeError
}
fail();
// ÐопÑÑки внеÑÑи Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ ÑеÑез меÑод Object.defineProperty Ñакже вÑбÑоÑÑÑ Ð¸ÑклÑÑение
Object.defineProperty(obj, "ohai", { value: 17 }); // вÑбÑоÑÐ¸Ñ TypeError
Object.defineProperty(obj, "foo", { value: "eit" }); // вÑбÑоÑÐ¸Ñ TypeError
СледÑÑÑий пÑÐ¸Ð¼ÐµÑ Ð¿Ð¾ÐºÐ°Ð·ÑваеÑ, ÑÑо знаÑениÑ-обÑекÑÑ Ð² замоÑоженном обÑекÑе могÑÑ Ð±ÑÑÑ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ñ (замоÑозка неглÑбокаÑ).
obj = {
internal: {},
};
Object.freeze(obj);
obj.internal.a = "знаÑениеA";
obj.internal.a; // 'знаÑениеA'
// ЧÑÐ¾Ð±Ñ ÑделаÑÑ Ð¾Ð±ÑÐµÐºÑ obj полноÑÑÑÑ Ð½ÐµÐ¸Ð·Ð¼ÐµÐ½ÑемÑм, замоÑаживаем каждÑй обÑÐµÐºÑ Ð² обÑекÑе obj.
// ÐÐ»Ñ ÑÑого воÑполÑзÑемÑÑ ÑÑой ÑÑнкÑией.
function deepFreeze(obj) {
// ÐолÑÑаем имена ÑвойÑÑв из обÑекÑа obj
var propNames = Object.getOwnPropertyNames(obj);
// ÐамоÑаживаем ÑвойÑÑва Ð´Ð»Ñ Ð·Ð°Ð¼Ð¾Ñозки Ñамого обÑекÑа
propNames.forEach(function (name) {
var prop = obj[name];
// ÐамоÑозка ÑвойÑÑва prop, еÑли оно обÑекÑ
if (typeof prop == "object" && prop !== null) deepFreeze(prop);
});
// ÐамоÑозиÑÑ Ñам обÑÐµÐºÑ obj (ниÑего не пÑоизойдÑÑ, еÑли он Ñже замоÑожен)
return Object.freeze(obj);
}
obj2 = {
internal: {},
};
deepFreeze(obj2);
obj2.internal.a = "дÑÑгоеÐнаÑение";
obj2.internal.a; // undefined
ÐÑимеÑаниÑ
Ð ES5 еÑли аÑгÑÐ¼ÐµÐ½Ñ Ð¼ÐµÑода не ÑвлÑеÑÑÑ Ð¾Ð±ÑекÑом (ÑвлÑеÑÑÑ Ð¿ÑимиÑивнÑм знаÑением), бÑÐ´ÐµÑ Ð²ÑбÑоÑено иÑклÑÑение TypeError
. Ð ES2015 Ñакой аÑгÑÐ¼ÐµÐ½Ñ Ð±ÑÐ´ÐµÑ ÑаÑÑмаÑÑиваÑÑÑÑ, как пÑоÑÑой замоÑоженнÑй обÑÐµÐºÑ Ð¸ меÑод его пÑоÑÑо веÑнÑÑ.
> Object.freeze(1)
TypeError: 1 is not an object // код ES5
> Object.freeze(1)
1 // код ES2015
СпеÑиÑикаÑии СовмеÑÑимоÑÑÑ Ñ Ð±ÑаÑзеÑами СмоÑÑиÑе Ñакже
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4