Переклад не закінчено. Будь ласка, допоможіть перекласти цю статтю з англійської.

Object.preventExtensions() метод позбавляє можливості додавати нові властивості до об'єкта (тобто розширювати об'єкт у подальшому).

Синтаксис

Object.preventExtensions(obj)

Параметри

obj
об'єкт, котрий має стати нерозширюваним.

Вихідне значення

нерозширюваний об'єкт.

Опис

Об'єкт вважається розширюваним, якщо нові властивості можуть бути додані до нього. Object.preventExtensions() робить об'єкт нерозширюваним, тобто таким, який уже ніколи не зможе містити інших властивостей, окрім тих, котрі він мав на момент застосування до нього даного методу. Зверніть увагу на те, що властивості нерозширюваного об'єкта все ж можна видаляти. Спроба ж додати нові властивості до нерозширюваного об'єкта не увінчається успіхом: або властивості просто не будуть додані без жодних помилок, або ж згенерується помилка типу TypeError (це трапляється найчастіше, але не виключно, у строгому режимі(strict mode)).

Object.preventExtensions() має вплив лише на додавання власних властивостей об'єкта. Властивості все-одно можуть бути додані на прототип об'єкта.

Цей метод робить [[prototype]] цільового об'єкта незмінним; будь-яке перевизначення [[prototype]] спричинить помилку TypeError. Ця поведінка є специфічною для внутрішньої властивості [[prototype]], інші ж властивості цільового об'єкта залишаються змінними.

Як тільки об'єкт стає нерозширюваним, неможливо зробити його знову розширюваним.

Приклади

// Object.preventExtensions повертає об'єкт,
// котрий уже неможливо доповнити новими властивостями.
var obj = {};
var obj2 = Object.preventExtensions(obj);
obj === obj2; // true

// За замовчуванням усі об'єкти є розширюваними.
var empty = {};
Object.isExtensible(empty); // === true

// ...але це легко можна змінити.
Object.preventExtensions(empty);
Object.isExtensible(empty); // === false

// Object.defineProperty згенерує помилку, якщо спробувати додати
// нову вдастивість до нерозширюваного об'єкта.
var nonExtensible = { removable: true };
Object.preventExtensions(nonExtensible);
Object.defineProperty(nonExtensible, 'new', {
  value: 8675309
}); // отримаємо TypeError

// У строгому режимі (strict mode), спроба додати нову властивість
// до нерозширюваного об'єкта спричиняє помилку TypeError.
function fail() {
  'use strict';
  // з'являється помилка (TypeError)
  nonExtensible.newProperty = 'FAIL';
}
fail();

Прототип нерозширюваного об'єкта лишається незмінним:

var fixed = Object.preventExtensions({}); 
// з'являється помилка типу 'TypeError'.
fixed.__proto__ = { oh: 'hai' };

Примітки

У ES5, якщо аргументом даного методу виступає не об'єкт, а примітивне значення, це спричинить помилку TypeError. У ES2015 ж, якщо аргументом методу буде не об'єкт, він буде сприйнятий методом так, наче б це був звичайний нерозширюваний об'єкт, тобто він просто буде повернений як вихідне значення без жодних змін чи помилок.

Object.preventExtensions(1);
// TypeError: 1 is not an object (ES5 code)

Object.preventExtensions(1);
// 1                             (ES2015 code)

Specifications

Specification Status Comment
ECMAScript 5.1 (ECMA-262)
The definition of 'Object.preventExtensions' in that specification.
Standard Initial definition. Implemented in JavaScript 1.8.5.
ECMAScript 2015 (6th Edition, ECMA-262)
The definition of 'Object.preventExtensions' in that specification.
Standard  
ECMAScript Latest Draft (ECMA-262)
The definition of 'Object.preventExtensions' in that specification.
Draft  

Browser compatibility

Update compatibility data on GitHub
DesktopMobileServer
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewChrome for AndroidEdge MobileFirefox for AndroidOpera for AndroidSafari on iOSSamsung InternetNode.js
Basic supportChrome Full support 6Edge Full support YesFirefox Full support 4IE Full support 9Opera Full support 12Safari Full support 5.1WebView Android Full support YesChrome Android Full support YesEdge Mobile Full support YesFirefox Android Full support 4Opera Android Full support YesSafari iOS Full support YesSamsung Internet Android Full support Yesnodejs Full support Yes
ES2015 behavior for non-object argumentChrome Full support 44Edge ? Firefox Full support 35IE Full support 11Opera Full support 31Safari Full support 9WebView Android Full support YesChrome Android Full support YesEdge Mobile ? Firefox Android Full support 35Opera Android Full support YesSafari iOS Full support 9Samsung Internet Android Full support Yesnodejs Full support Yes

Legend

Full support  
Full support
Compatibility unknown  
Compatibility unknown

See also

Мітки документа й учасники

Зробили внесок у цю сторінку: OksanaH
Востаннє оновлена: OksanaH,