--- title: Symbol.unscopables slug: Web/JavaScript/Reference/Global_Objects/Symbol/unscopables tags: - ECMAScript 2015 - JavaScript - Symbol - Властивість - Символ translation_of: Web/JavaScript/Reference/Global_Objects/Symbol/unscopables ---
Добревідомий символ Symbol.unscopables
використовується, щоб визначити об'єкт, чиї імена особистих та успадкованих властивостей виключаються з прив'язок оточення with
для асоційованого об'єкта.
Символ @@unscopables
(Symbol.unscopables
) можна визначити на будь-якому об'єкті, щоб запобігти розкриттю імен властивостей в якості лексичних змінних у прив'язках оточення with
. Зауважте, що при використанні строгого режиму інструкції with
недоступні та, відповідно, не потребують цього символа.
Присвоєння властивості значення true
у об'єкті unscopables
зробить її невидимою (unscopable), і, таким чином, вона не з'явиться у змінних лексичної області видимості. Присвоєння властивості значення false
зробить її видимою (scopable
), відповідно, вона з'явиться у змінних лексичної області видимості.
{{js_property_attributes(0,0,0)}}
Наступний код добре працює у версіях ES5 та нижче. Однак, у ECMAScript 2015 та пізніших версіях був запроваджений метод {{jsxref("Array.prototype.keys()")}}. Це означає, що всередині оточення with
"keys" тепер буде методом, а не змінною. Саме тоді був доданий символ unscopables
. Вбудоване налаштування unscopables
реалізоване у вигляді {{jsxref("Array.@@unscopables", "Array.prototype[@@unscopables]")}}, щоб запобігти потраплянню деяких методів масиву у область видимості with
.
var keys = []; with (Array.prototype) { keys.push('something'); } Object.keys(Array.prototype[Symbol.unscopables]); // ["copyWithin", "entries", "fill", "find", "findIndex", // "includes", "keys", "values"]
Ви також можете налаштувати unscopables
для своїх власних об'єктів.
var obj = { foo: 1, bar: 2 }; obj[Symbol.unscopables] = { foo: false, bar: true }; with (obj) { console.log(foo); // 1 console.log(bar); // ReferenceError: bar is not defined }
Специфікація |
---|
{{SpecName('ESDraft', '#sec-symbol.unscopables', 'Symbol.unscopables')}} |
{{Compat("javascript.builtins.Symbol.unscopables")}}
with
(недоступний у строгому режимі)