В JavaScript расширяемое свойство объекта используется для указания того, разрешено ли динамически добавлять новые свойства в объекте. В стандарте Ecmascript 3 все объекты расширяются. В стандарте Ecmascript 5 все объекты по -прежнему расширяются по умолчанию, но это свойство может быть изменено путем настройки.
Чтобы проверить, расширяется ли объект, вы можете использовать оператор object.isextensible ():
Кода -копия выглядит следующим образом:
var o = {x: 1};
console.log (object.isextensible (o)); // true
Чтобы сделать объект, который не является расширяемым, вы можете использовать оператор object.preventextensions ():
Кода -копия выглядит следующим образом:
Object.preventextensions (o)
console.log (object.isextensible (o)); // false
Стоит отметить, что, поскольку не существует обратной операции Object.preventextensions (), как только объект устанавливается на неэффективную, нет способа установить его для расширения.
Объем оператора Object.PreventExtensions () является самим объектом, и объект прототипа не влияет. Если объект устанавливается на неэктакбру, свойства по-прежнему могут быть динамически добавляются в свой объект прототипа, и эти динамически добавленные свойства все еще могут быть унаследованы объектом.
Object.seal () и object.freeze ()
Object.preventextensions () предотвращает динамическое добавление новых свойств в объекты. В дополнение к этой операции, в JavaScript существует еще две строгие операции для защиты объектов: object.seal () и object.freeze ().
Функция object.seal () заключается в том, чтобы установить настраиваемое свойство собственного свойства всех объектов на false на основе Object.preventextensions (). Как и операция object.preventextensions (), object.seal () не имеет антиперации, поэтому объект не может быть восстановлен после его герметизации. В JavaScript вы можете использовать object.issealed (), чтобы запрашивать, был ли объект запечатан.
Функция Object.Freeze () заключается в том, чтобы установить свойство всех объектов как только для чтения на основе Object.Seal (). Как object.seal () и object.preventextensions (), Object.Freeze () не имеет антипередачи, поэтому объект не может быть восстановлен, как только он замораживает. В JavaScript вы можете использовать object.isfrozen (), чтобы запрашивать, был ли объект замораживает.
Кода -копия выглядит следующим образом:
console.log (object.issealed (o)); // false
Object.Seal (O);
console.log (object.issealed (o)); // true
console.log (object.isfrozen (o)); // false
Object.Freeze (O);
console.log (object.isfrozen (o)); // true
Будь то object.preventextensions (), object.seal () и object.freeze (), его объем действия - это сам объект, и объект объекта не будет затронут.