From 074785cea106179cb3305637055ab0a009ca74f2 Mon Sep 17 00:00:00 2001 From: Peter Bengtsson Date: Tue, 8 Dec 2020 14:42:52 -0500 Subject: initial commit --- .../global_objects/weakmap/clear/index.html | 91 ++++++++++++ .../global_objects/weakmap/delete/index.html | 114 +++++++++++++++ .../global_objects/weakmap/get/index.html | 115 +++++++++++++++ .../global_objects/weakmap/has/index.html | 118 +++++++++++++++ .../reference/global_objects/weakmap/index.html | 158 +++++++++++++++++++++ .../global_objects/weakmap/prototype/index.html | 74 ++++++++++ .../global_objects/weakmap/set/index.html | 120 ++++++++++++++++ 7 files changed, 790 insertions(+) create mode 100644 files/ru/web/javascript/reference/global_objects/weakmap/clear/index.html create mode 100644 files/ru/web/javascript/reference/global_objects/weakmap/delete/index.html create mode 100644 files/ru/web/javascript/reference/global_objects/weakmap/get/index.html create mode 100644 files/ru/web/javascript/reference/global_objects/weakmap/has/index.html create mode 100644 files/ru/web/javascript/reference/global_objects/weakmap/index.html create mode 100644 files/ru/web/javascript/reference/global_objects/weakmap/prototype/index.html create mode 100644 files/ru/web/javascript/reference/global_objects/weakmap/set/index.html (limited to 'files/ru/web/javascript/reference/global_objects/weakmap') diff --git a/files/ru/web/javascript/reference/global_objects/weakmap/clear/index.html b/files/ru/web/javascript/reference/global_objects/weakmap/clear/index.html new file mode 100644 index 0000000000..260264b01d --- /dev/null +++ b/files/ru/web/javascript/reference/global_objects/weakmap/clear/index.html @@ -0,0 +1,91 @@ +--- +title: WeakMap.prototype.clear() +slug: Web/JavaScript/Reference/Global_Objects/WeakMap/clear +translation_of: Web/JavaScript/Reference/Global_Objects/WeakMap/clear +--- +
{{JSRef}} {{obsolete_header}}
+ +

Метод clear() удаляет все элементы из объекта WeakMap, но он больше не является частью ECMAScript и его реализаций.

+ +

Синтаксис

+ +
wm.clear();
+ +

Примеры

+ +

Использование метода clear

+ +
var wm = new WeakMap();
+var obj = {};
+
+wm.set(obj, "foo");
+wm.set(window, "bar");
+
+wm.has(obj); // true
+wm.has(window); // true
+
+wm.clear();
+
+wm.has(obj)  // false
+wm.has(window)  // false
+
+ +

Спецификации

+ +

Не входит ни в одну текущую спецификацию или черновик. Этот метод был частью черновика ECMAScript 6, до 28 ревизии (версия от 14 октября, 2014), но был удален в последующих версиях черновика. В финальном стандарте его не будет.

+ +

Совместимость с браузерами

+ +

{{CompatibilityTable}}

+ +
+ + + + + + + + + + + + + + + + + + + +
FeatureChromeFirefox (Gecko)Internet ExplorerOperaSafari
Basic support3620-4511237.1
+
+ +
+ + + + + + + + + + + + + + + + + + + +
FeatureAndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Basic support{{CompatNo}}20-45{{CompatNo}}{{CompatNo}}8
+
+ +

Смотрите также

+ + diff --git a/files/ru/web/javascript/reference/global_objects/weakmap/delete/index.html b/files/ru/web/javascript/reference/global_objects/weakmap/delete/index.html new file mode 100644 index 0000000000..76e4b078dc --- /dev/null +++ b/files/ru/web/javascript/reference/global_objects/weakmap/delete/index.html @@ -0,0 +1,114 @@ +--- +title: WeakMap.prototype.delete() +slug: Web/JavaScript/Reference/Global_Objects/WeakMap/delete +translation_of: Web/JavaScript/Reference/Global_Objects/WeakMap/delete +--- +
{{JSRef}}
+ +

Метод delete() удаляет элемент из объекта WeakMap.

+ +

Синтаксис

+ +
wm.delete(key);
+ +

Параетры

+ +
+
key
+
Обязателен. Ключ элемента, который будет уделен из объекта WeakMap.
+
+ +

Возвращаемое значение

+ +

Возвращает true если элемент из объекта WeakMap удалён успешно.

+ +

Примеры

+ +

Использование метода delete

+ +
var wm = new WeakMap();
+wm.set(window, "foo");
+
+wm.delete(window); // Возвращает true. Успешно удалён.
+
+wm.has(window);    // Возвращает false. Объекта window больше нет в WeakMap.
+
+ +

Спецификация

+ + + + + + + + + + + + + + +
SpecificationStatusComment
{{SpecName('ES6', '#sec-weakmap.prototype.delete', 'WeakMap.prototype.delete')}}{{Spec2('ES6')}}Изначальное определение.
+ +

Совместимость с браузерами

+ +

{{CompatibilityTable}}

+ +
+ + + + + + + + + + + + + + + + + + + +
FeatureChromeFirefox (Gecko)Internet ExplorerOperaSafari
Basic support36{{CompatGeckoDesktop("6.0")}}11237.1
+
+ +
+ + + + + + + + + + + + + + + + + + + +
FeatureAndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Basic support{{CompatNo}}{{CompatGeckoMobile("6.0")}}{{CompatNo}}{{CompatNo}}8
+
+ +

Firefox-specific notes

+ + + +

Смотрите также

+ + diff --git a/files/ru/web/javascript/reference/global_objects/weakmap/get/index.html b/files/ru/web/javascript/reference/global_objects/weakmap/get/index.html new file mode 100644 index 0000000000..3617aa5f82 --- /dev/null +++ b/files/ru/web/javascript/reference/global_objects/weakmap/get/index.html @@ -0,0 +1,115 @@ +--- +title: WeakMap.prototype.get() +slug: Web/JavaScript/Reference/Global_Objects/WeakMap/get +translation_of: Web/JavaScript/Reference/Global_Objects/WeakMap/get +--- +
{{JSRef}}
+ +

Метод get() возвращает элемент из объекта WeakMap,

+ +

Синтаксис

+ +
wm.get(key);
+ +

Параметры

+ +
+
key
+
Обязателен. Ключ элемента, который будет возвращён из объекта WeakMap.
+
+ +

Возвращаемое значение

+ +

Возвращает элемент по указанному ключу или undefined, если ключ не может быть найден в объекте WeakMap.

+ +

Примеры

+ +

Использование метода get

+ +
var wm = new WeakMap();
+wm.set(window, "foo");
+
+wm.get(window); // Возвращает "foo".
+wm.get("baz");  // Возвращает undefined.
+
+ +

Спецификация

+ + + + + + + + + + + + + + +
SpecificationStatusComment
{{SpecName('ES6', '#sec-weakmap.prototype.get', 'WeakMap.prototype.get')}}{{Spec2('ES6')}}Изначальное определение.
+ +

Совместимость с браузерами

+ +

{{CompatibilityTable}}

+ +
+ + + + + + + + + + + + + + + + + + + +
FeatureChromeFirefox (Gecko)Internet ExplorerOperaSafari
Basic support36{{CompatGeckoDesktop("6.0")}}11237.1
+
+ +
+ + + + + + + + + + + + + + + + + + + +
FeatureAndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Basic support{{CompatNo}}{{CompatGeckoMobile("6.0")}}{{CompatNo}}{{CompatNo}}8
+
+ +

Firefox-specific notes

+ + + +

Смотрите также

+ + diff --git a/files/ru/web/javascript/reference/global_objects/weakmap/has/index.html b/files/ru/web/javascript/reference/global_objects/weakmap/has/index.html new file mode 100644 index 0000000000..18eede2abb --- /dev/null +++ b/files/ru/web/javascript/reference/global_objects/weakmap/has/index.html @@ -0,0 +1,118 @@ +--- +title: WeakMap.prototype.has() +slug: Web/JavaScript/Reference/Global_Objects/WeakMap/has +translation_of: Web/JavaScript/Reference/Global_Objects/WeakMap/has +--- +
{{JSRef}}
+ +

Метод has() возвращает булевое значение, которое указывает на то существует элемент с таким ключом в объекте WeakMap или нет.

+ +

Синтаксис

+ +
wm.has(key);
+ +

Параметры

+ +
+
key
+
Обязателен. Ключ элемента, существование которого необходимо проверить в объекте WeakMap.
+
+ +

Возвращаемое значение

+ +
+
Boolean
+
Возвращает true если элемент с указанным ключом существует в объекте WeakMap, если нет — false.
+
+ +

Примеры

+ +

Использование метода has

+ +
var wm = new WeakMap();
+wm.set(window, "foo");
+
+wm.has(window); // возвращает true
+wm.has("baz");  // возвращает false
+
+ +

Спецификация

+ + + + + + + + + + + + + + +
SpecificationStatusComment
{{SpecName('ES6', '#sec-weakmap.prototype.has', 'WeakMap.prototype.has')}}{{Spec2('ES6')}}Изначальное определение.
+ +

Совместимость с браузерами

+ +

{{CompatibilityTable}}

+ +
+ + + + + + + + + + + + + + + + + + + +
FeatureChromeFirefox (Gecko)Internet ExplorerOperaSafari
Basic support36{{CompatGeckoDesktop("6.0")}}11237.1
+
+ +
+ + + + + + + + + + + + + + + + + + + +
FeatureAndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Basic support{{CompatNo}}{{CompatGeckoMobile("6.0")}}{{CompatNo}}{{CompatNo}}8
+
+ +

Firefox-specific notes

+ + + +

See also

+ + diff --git a/files/ru/web/javascript/reference/global_objects/weakmap/index.html b/files/ru/web/javascript/reference/global_objects/weakmap/index.html new file mode 100644 index 0000000000..1bf1b3c017 --- /dev/null +++ b/files/ru/web/javascript/reference/global_objects/weakmap/index.html @@ -0,0 +1,158 @@ +--- +title: WeakMap +slug: Web/JavaScript/Reference/Global_Objects/WeakMap +translation_of: Web/JavaScript/Reference/Global_Objects/WeakMap +--- +
{{JSRef("Global_Objects", "WeakMap")}}
+ +

Сводка

+ +

Объект WeakMap — коллекция пар ключ-значение. В качестве ключей могут быть использованы только объекты, а значения могут быть произвольных типов.

+ +

Синтаксис

+ +
new WeakMap([iterable])
+
+ +

Параметры

+ +
+
iterable
+
Может быть массивом или любым другим итерируемым объектом, элементы которого являются парами ключ-значение (массивы из двух элементов). Каждая пара ключ-значение будет добавлена во вновь созданный экземпляр WeakMap. Null обрабатывается как undefined.
+
+ +

Описание

+ +

Ключами WeakMap могут быть только объекты. {{Glossary("Primitive", "Примитивы")}} в качестве ключей не допускаются (т.е. {{jsxref("Symbol")}} не может быть ключом WeakMap).

+ +

Почему WeakMap?

+ +

Опытный JavaScript разработчик заметит, что map API можно реализовать на JavaScript c помощью двух массивов (один для ключей, второй для значений) и четырех общих API методов. Установка элементов в этот map должна будет одновременно запушить ключи и значения. В результате индексы ключа и значения будут корректными. Получение значений с map потребует итерирование ключей, чтобы найти совпадение, а затем использование индекса этого соответствия для извлечения соответствующего значения из массива значений.

+ +

У такой реализации было бы два главных неудобства. Первым является O(n) поиск (где n — количество ключей в map), так как обе операции требуют итерирование списка ключей для нахождения совпадения. Вторым – проблема утечки памяти. В словарях, написанных вручную, массив с ключами будет хранить ссылки на объекты-ключи, не давая им быть помеченными сборщиком мусора. В нативных WeakMap, ссылки на объекты-ключи хранятся «слабо», что означает то, что они не предотвратят сборку мусора в том случае, если других ссылок на объект не будет.

+ +

WeakMaps имеют “weak” («слабые») обращения к ключам объекта, а следовательно непрепятствие сборщику мусора, когда мы больше не имеем объекта-ключа. WeakMaps могут быть особенно полезными конструкциями при сопоставлении ключей с информацией о ключе, который ценен, только если ключ не был собран сборщиком мусора (Garbage collector).

+ +

Из-за того, что ссылки являются слабыми, ключи WeakMap не перечисляемы (то есть нет метода, который возвращает список ключей). Иначе список бы зависел от состояния сбора мусора, представляя индетерминизм. Если вы хотите иметь список ключей, вам следует поддерживать его самостоятельно.

+ +

Свойства

+ +
+
WeakMap.length
+
Значение свойства length всегда равно 0.
+
{{jsxref("WeakMap.prototype")}}
+
Представляет прототип конструктора WeakMap. Позволяет добавлять свойства всем объектам типа WeakMap.
+
+ +

Экземпляры WeakMap

+ +

Все экземпляры WeakMap унаследованы от {{jsxref("WeakMap.prototype")}}.

+ +

Свойства

+ +

{{page('ru/Web/JavaScript/Reference/Global_Objects/WeakMap/prototype','Properties')}}

+ +

Методы

+ +

{{page('ru/Web/JavaScript/Reference/Global_Objects/WeakMap/prototype','Methods')}}

+ +

Примеры

+ +

Использование объекта WeakMap

+ +
const wm1 = new WeakMap(),
+    wm2 = new WeakMap(),
+    wm3 = new WeakMap();
+const o1 = {},
+    o2 = function(){},
+    o3 = window,
+    o4 = [1, 2, 3];
+
+wm1.set(o1, 37);
+wm1.set(o2, 'azerty');
+wm2.set(o1, o2);        // значением может быть что угодно, включая объект или функцию
+wm2.set(o3, undefined);
+wm2.set(wm1, wm2);      // ключами и значениями могут быть объекты. Даже WeakMap-ами
+
+wm1.get(o2); // 'azerty'
+wm2.get(o2); // undefined, нет значения для o2 в wm2
+wm2.get(o3); // undefined, это установленное значение
+
+wm1.has(o2); // true
+wm2.has(o2); // false
+wm2.has(o3); // true (даже если значение равно 'undefined')
+
+wm3.set(o1, 37);
+wm3.get(o1);     // 37
+
+wm1.has(o1);     // true
+wm1.delete(o1);
+wm1.has(o1);     // false
+
+ +

Пример: Реализация класса WeakMap-like классов с методом .clear()

+ +
class ClearableWeakMap {
+    constructor(init) {
+        this._wm = new WeakMap(init)
+    }
+    clear() {
+        this._wm = new WeakMap()
+    }
+    delete(k) {
+        return this._wm.delete(k)
+    }
+    get(k) {
+        return this._wm.get(k)
+    }
+    has(k) {
+        return this._wm.has(k)
+    }
+    set(k, v) {
+        this._wm.set(k, v)
+        return this
+    }
+}
+
+ +

Спецификации

+ + + + + + + + + + + + + + + + + + + + + +
СпецификацияСтатусКомментарий
{{SpecName('ES2015', '#sec-weakmap-objects', 'WeakMap')}}{{Spec2('ES2015')}}Изначальное определение.
{{SpecName('ESDraft', '#sec-weakmap-objects', 'WeakMap')}}{{Spec2('ESDraft')}}
+ +

+ +

Совместимость с браузерами

+ +

{{Compat("javascript.builtins.WeakMap")}}

+ +

Смотрите также

+ +

+ + diff --git a/files/ru/web/javascript/reference/global_objects/weakmap/prototype/index.html b/files/ru/web/javascript/reference/global_objects/weakmap/prototype/index.html new file mode 100644 index 0000000000..3a955a427f --- /dev/null +++ b/files/ru/web/javascript/reference/global_objects/weakmap/prototype/index.html @@ -0,0 +1,74 @@ +--- +title: WeakMap.prototype +slug: Web/JavaScript/Reference/Global_Objects/WeakMap/prototype +translation_of: Web/JavaScript/Reference/Global_Objects/WeakMap +--- +
{{JSRef}}
+ +

WeakMap.prototype свойство указыкает на прототип {{jsxref("WeakMap")}} конструктора.

+ +
{{js_property_attributes(0,0,0)}}
+ +

Описание

+ +

{{jsxref("WeakMap")}} экзепляры унаследывают {{jsxref("WeakMap.prototype")}}. Вы можите использовать прототип конструктора объекта для добавления нових свойств и/или методов всем экзепляра класса WeakMap.

+ +

WeakMap.prototype является простым объектом:

+ +
Object.prototype.toString.call(WeakMap.prototype); // "[object Object]"
+ +

Свойства

+ +
+
WeakMap.prototype.constructor
+
Возвращает функцию, создавшую экземпляр. {{jsxref("WeakMap")}} function by default.
+
+ +

Методы

+ +
+
{{jsxref("WeakMap.delete", "WeakMap.prototype.delete(key)")}}
+
Удаление значение по ключу. WeakMap.prototype.has(key) вернет false после.
+
{{jsxref("WeakMap.get", "WeakMap.prototype.get(key)")}}
+
Возвращает значение по ключу, or undefined такового нет.
+
{{jsxref("WeakMap.has", "WeakMap.prototype.has(key)")}}
+
Вернет логическое значение, связанное с существованием ключа.
+
{{jsxref("WeakMap.set", "WeakMap.prototype.set(key, value)")}}
+
Устанавливает значение по ключу, после возвращает самого себя.
+
{{jsxref("WeakMap.prototype.clear()")}} {{obsolete_inline}}
+
Удаляет все ключи-значения из WeakMap объекта. Заметьте, что это возможно, только есть WeakMap-like объект имеет.clear() метод путем инкапсулирования WeakMap объекта, раннее неимевшего его (смотри пример на странице {{jsxref("WeakMap")}})
+
+ +

Спецификации

+ + + + + + + + + + + + + + + + + + + +
SpecificationStatusComment
{{SpecName('ES2015', '#sec-weakmap.prototype', 'WeakMap.prototype')}}{{Spec2('ES2015')}}Initial definition.
{{SpecName('ESDraft', '#sec-weakmap.prototype', 'WeakMap.prototype')}}{{Spec2('ESDraft')}} 
+ +

Совместимость

+ + + +

{{Compat("javascript.builtins.WeakMap.prototype")}}

+ +

Рекомендуем

+ + diff --git a/files/ru/web/javascript/reference/global_objects/weakmap/set/index.html b/files/ru/web/javascript/reference/global_objects/weakmap/set/index.html new file mode 100644 index 0000000000..f8dad8a44f --- /dev/null +++ b/files/ru/web/javascript/reference/global_objects/weakmap/set/index.html @@ -0,0 +1,120 @@ +--- +title: WeakMap.prototype.set() +slug: Web/JavaScript/Reference/Global_Objects/WeakMap/set +translation_of: Web/JavaScript/Reference/Global_Objects/WeakMap/set +--- +
{{JSRef}}
+ +

Метод set() добавляет новый элемент с указанными ключом и значением в объект WeakMap.

+ +

Синтаксис

+ +
wm.set(key, value);
+ +

Параметры

+ +
+
key
+
Обязателен. Ключ добавляемого в WeakMap объект элемента.
+
value
+
Обязателен. Значение добавляемого в WeakMap объект элемента.
+
+ +

Возвращаемое значение

+ +

Объект WeakMap.

+ +

Примеры

+ +

Использование метода set

+ +
var wm = new WeakMap();
+var obj = {};
+
+// Добавляет новый элемент в объект WeakMap
+wm.set(obj, "foo").set(window, "bar"); // chainable
+
+// Обновляет элемент в объекте WeakMap
+wm.set(obj, "baz");
+
+ +

Спецификация

+ + + + + + + + + + + + + + +
SpecificationStatusComment
{{SpecName('ES6', '#sec-weakmap.prototype.set', 'WeakMap.prototype.set')}}{{Spec2('ES6')}}Initial definition.
+ +

Совместимость с браузерами

+ +

{{CompatibilityTable}}

+ +
+ + + + + + + + + + + + + + + + + + + +
FeatureChromeFirefox (Gecko)Internet ExplorerOperaSafari
Basic support36{{CompatGeckoDesktop("6.0")}}11237.1
+
+ +
+ + + + + + + + + + + + + + + + + + + +
FeatureAndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Basic support{{CompatNo}}{{CompatGeckoMobile("6.0")}}{{CompatNo}}{{CompatNo}}8
+
+ +

Firefox-specific notes

+ + + +

Смотрите также

+ + -- cgit v1.2.3-54-g00ecf