From a065e04d529da1d847b5062a12c46d916408bf32 Mon Sep 17 00:00:00 2001 From: Peter Bengtsson Date: Tue, 8 Dec 2020 21:46:22 -0500 Subject: update based on https://github.com/mdn/yari/issues/2028 --- .../global_objects/object/count/index.html | 83 --------- .../global_objects/object/eval/index.html | 81 --------- .../global_objects/object/getnotifier/index.html | 47 ----- .../global_objects/object/nosuchmethod/index.html | 195 --------------------- .../global_objects/object/observe/index.html | 142 --------------- .../global_objects/object/parent/index.html | 75 -------- .../global_objects/object/unobserve/index.html | 97 ---------- .../global_objects/object/unwatch/index.html | 93 ---------- .../global_objects/object/watch/index.html | 168 ------------------ 9 files changed, 981 deletions(-) delete mode 100644 files/ru/web/javascript/reference/global_objects/object/count/index.html delete mode 100644 files/ru/web/javascript/reference/global_objects/object/eval/index.html delete mode 100644 files/ru/web/javascript/reference/global_objects/object/getnotifier/index.html delete mode 100644 files/ru/web/javascript/reference/global_objects/object/nosuchmethod/index.html delete mode 100644 files/ru/web/javascript/reference/global_objects/object/observe/index.html delete mode 100644 files/ru/web/javascript/reference/global_objects/object/parent/index.html delete mode 100644 files/ru/web/javascript/reference/global_objects/object/unobserve/index.html delete mode 100644 files/ru/web/javascript/reference/global_objects/object/unwatch/index.html delete mode 100644 files/ru/web/javascript/reference/global_objects/object/watch/index.html (limited to 'files/ru/web/javascript/reference/global_objects/object') diff --git a/files/ru/web/javascript/reference/global_objects/object/count/index.html b/files/ru/web/javascript/reference/global_objects/object/count/index.html deleted file mode 100644 index 7308b40b0f..0000000000 --- a/files/ru/web/javascript/reference/global_objects/object/count/index.html +++ /dev/null @@ -1,83 +0,0 @@ ---- -title: Object.prototype.__count__ -slug: Web/JavaScript/Reference/Global_Objects/Object/count -tags: - - JavaScript - - Object - - Obsolete - - Property - - Prototype - - Reference -translation_of: Archive/Web/JavaScript/Object.count ---- -
{{JSRef("Global_Objects", "Object")}} {{obsolete_header("2")}}
- -

Сводка

-

Свойство __count__ использовалось для хранения количества перечисляемых свойств объекта, но было удалено.

- -

Синтаксис

-
obj.__count__
- -

Пример

-
{ 1: 1 }.__count__              // 1
-[].__count__                    // 0
-[1].__count__                   // 1
-[1, /* дыра */, 2, 3].__count__ // 3
-
- -

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

-

Не является частью какой-либо спецификации.

- -

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

-
{{CompatibilityTable}}
-
- - - - - - - - - - - - - - - - - - - -
ВозможностьChromeFirefox (Gecko)Internet ExplorerOperaSafari
Базовая поддержка{{CompatNo}}{{CompatNo}}{{CompatNo}}{{CompatNo}}{{CompatNo}}
-
-
- - - - - - - - - - - - - - - - - - - - - -
ВозможностьAndroidChrome для AndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Базовая поддержка{{CompatNo}}{{CompatNo}}{{CompatNo}}{{CompatNo}}{{CompatNo}}{{CompatNo}}
-
- -

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

- diff --git a/files/ru/web/javascript/reference/global_objects/object/eval/index.html b/files/ru/web/javascript/reference/global_objects/object/eval/index.html deleted file mode 100644 index e6b8e3668f..0000000000 --- a/files/ru/web/javascript/reference/global_objects/object/eval/index.html +++ /dev/null @@ -1,81 +0,0 @@ ---- -title: Object.prototype.eval() -slug: Web/JavaScript/Reference/Global_Objects/Object/eval -tags: - - JavaScript - - Method - - Object - - Obsolete - - Prototype -translation_of: Archive/Web/JavaScript/Object.eval ---- -
- {{JSRef("Global_Objects", "Object")}} {{obsolete_header}}
-

Сводка

-

Метод Object.eval() использовался для вычисления строки JavaScript-кода в контексте объекта, однако, был удалён.

-

Синтаксис

-
obj.eval(string)
-

Параметры

-
-
- string
-
- Любая строка, представляющая выражение, инструкцию или последовательность инструкций JavaScript. Выражение может содержать переменые и свойства существующих объектов.
-
-

Описание

-

Метод eval больше не используется как метод объекта. Вместо него используйте глобальную функцию {{jsxref("Global_Objects/eval", "eval()")}}.

-

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

-

Не является частью какой-либо спецификации.

-

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

-
- {{CompatibilityTable}}
-
- - - - - - - - - - - - - - - - - - - -
ВозможностьChromeFirefox (Gecko)Internet ExplorerOperaSafari
Базовая поддержка{{CompatNo}}{{CompatNo}}{{CompatNo}}{{CompatNo}}{{CompatNo}}
-
-
- - - - - - - - - - - - - - - - - - - - - -
ВозможностьAndroidChrome для AndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Базовая поддержка{{CompatNo}}{{CompatNo}}{{CompatNo}}{{CompatNo}}{{CompatNo}}{{CompatNo}}
-
-

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

- diff --git a/files/ru/web/javascript/reference/global_objects/object/getnotifier/index.html b/files/ru/web/javascript/reference/global_objects/object/getnotifier/index.html deleted file mode 100644 index 1947d51f73..0000000000 --- a/files/ru/web/javascript/reference/global_objects/object/getnotifier/index.html +++ /dev/null @@ -1,47 +0,0 @@ ---- -title: Object.getNotifier() -slug: Web/JavaScript/Reference/Global_Objects/Object/getNotifier -translation_of: Archive/Web/JavaScript/Object.getNotifier ---- -
{{JSRef}} {{obsolete_header}}
- -

Метод Object.getNotifer() использовался для создания объекта, который позволяет синтетически инициировать изменение, но не рекомендуется  и удаляется в браузерах.

- -

Синтаксис

- -
Object.getNotifier(obj)
- -

Параметры

- -
-
obj
-
Объект для извлечения уведомителя.
-
- -

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

- -

Объект увидомителя, связанный с объектом, передаваемым в функцию.

- -

Описание

- -

Уведомитель используется для запуска искусственных изменений, которые будут обнаружены Object.observe().

- -

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

- -

Strawman proposal specification.

- -

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

- -
- - -

{{Compat("javascript.builtins.Object.getNotifier")}}

-
- -

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

- - diff --git a/files/ru/web/javascript/reference/global_objects/object/nosuchmethod/index.html b/files/ru/web/javascript/reference/global_objects/object/nosuchmethod/index.html deleted file mode 100644 index 6f0827751f..0000000000 --- a/files/ru/web/javascript/reference/global_objects/object/nosuchmethod/index.html +++ /dev/null @@ -1,195 +0,0 @@ ---- -title: Object.prototype.__noSuchMethod__ -slug: Web/JavaScript/Reference/Global_Objects/Object/noSuchMethod -tags: - - JavaScript - - Non-standard - - Object - - Property - - Prototype - - Reference -translation_of: Archive/Web/JavaScript/Object.noSuchMethod ---- -
{{JSRef("Global_Objects", "Object")}} {{non-standard_header}}
- -
Хотя свойство __noSuchMethod__ и нестандартно, спецификация ECMAScript Harmony (ES6) содержит объект {{jsxref("Proxy")}}, с помощью которого вы можете сделать всё тоже самое, что и при использовании этого свойством (и даже больше).
- -

Сводка

-

Свойство __noSuchMethod__ ссылается на функцию, выполняющуюся каждый раз при вызове на объекте несуществующего метода.

- -

Синтаксис

-
obj.__noSuchMethod__ = fun
- -

Параметры

-
-
fun
-
Функция, имеющая вид
-
-
function(id, args) { . . . }
-
-
id
-
Имя вызванного несуществующего метода
-
args
-
Массив аргументов, переданный в метод
-
-
-
- -

Описание

-

По умолчанию, при попытке вызвать не существующий в объекте метод, будет выброшено исключение {{jsxref("Global_Objects/TypeError", "TypeError")}}. Это поведение можно обойти, определив функцию __noSuchMethod__ в качестве члена объекта. Функция принимает два аргумента, первый является именем метода, который попытались вызвать, а второй — массивом аргументов, которые были переданы в метод при его вызове. Второй аргумент является настойщим массивом (то есть, он наследуется через цепочку прототипов от {{jsxref("Array.prototype")}}), а не массивоподобным объектом arguments.

-

Если данный метод не может быть вызван, либо по причине того, что он установлен в {{jsxref("Global_Objects/undefined", "undefined")}} по умолчанию, либо удалён, либо вручную установлен в не-функцию, движок JavaScript вернётся к выбрасыванию исключения {{jsxref("Global_Objects/TypeError", "TypeError")}}.

- -

Примеры

- -

Пример: простая проверка свойства __noSuchMethod__

-
var o = {
-    __noSuchMethod__: function(id, args) { console.log(id, '(' + args.join(', ') + ')'); }
-};
-
-o.foo(1, 2, 3);
-o.bar(4, 5);
-o.baz();
-
-// Вывод
-// foo (1, 2, 3)
-// bar (4, 5)
-// baz ()
-
- -

Пример: использование свойства __noSuchMethod__ для симуляции множественного наследования

-

Ниже показан пример кода, реализующего примитивную форму множественного наследования.

-
// Не работает с множественным наследованием объектов в качестве родителей
-function noMethod(name, args) {
-    var parents = this.__parents_;
-
-    // Пройдёмся по всем родителям
-    for (var i = 0; i < parents.length; i++) {
-        // Если нашли функцию в родителе, вызовем её
-        if (typeof parents[i][name] == 'function') {
-            return parents[i][name].apply(this, args);
-        }
-    }
-
-    // Если мы здесь, метод не был найден
-    throw new TypeError;
-}
-
-// Используется для добавления родителя при множественном наследовании
-function addParent(obj, parent) {
-    // Если объект ещё не инициализирован, инициализируем его
-    if (!obj.__parents_) {
-        obj.__parents_ = [];
-        obj.__noSuchMethod__ = noMethod;
-    }
-
-    // Добавляем родителя
-    obj.__parents_.push(parent);
-}
-
-

Ниже показан пример использования этой идеи.

-
// Пример первого базового класса
-
-function NamedThing(name) {
-    this.name = name;
-}
-
-NamedThing.prototype = {
-    getName: function() { return this.name; },
-    setName: function(newName) { this.name = newName; }
-}
-
-// Пример второго базового класса
-
-function AgedThing(age){
-    this.age = age;
-}
-
-AgedThing.prototype = {
-    getAge: function() { return this.age; },
-    setAge: function(age) { this.age = age; }
-}
-
-// Дочерний класс. Наследуется от NamedThing и AgedThing, а также определяет свойство address
-
-function Person(name, age, address) {
-    addParent(this, NamedThing.prototype);
-    NamedThing.call(this, name);
-    addParent(this, AgedThing.prototype);
-    AgedThing.call(this, age);
-    this.address = address;
-}
-
-Person.prototype = {
-    getAddr: function() { return this.address; },
-    setAddr: function(addr) { this.address = addr; }
-}
-
-var bob = new Person('Боб', 25, 'Нью-Йорк');
-
-console.log('getAge лежит ' + (('getAge' in bob) ? 'в' : 'не в') + ' объекте bob');
-console.log('возраст Боба: ' + bob.getAge());
-console.log('getName лежит ' + (('getName' in bob) ? 'в' : 'не в') + ' объекте bob');
-console.log('имя Боба: ' + bob.getName());
-console.log('getAddr лежит ' + (('getAddr' in bob) ? 'в' : 'не в') + ' объекте bob');
-console.log('адрес Боба: ' + bob.getAddr());
-
-

Вывод примера будет следующим:

-
getAge лежит не в объекте bob
-возраст Боба: 25
-getName лежит не в объекте bob
-имя Боба: Боб
-getAddr лежит в объекте bob
-адрес Боба: Нью-Йорк
-
- -

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

-

Не является частью какой-либо спецификации.

- -

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

-
{{CompatibilityTable}}
-
- - - - - - - - - - - - - - - - - - - -
ВозможностьChromeFirefox (Gecko)Internet ExplorerOperaSafari
Базовая поддержка{{CompatNo}}{{CompatGeckoDesktop("1.0")}}{{CompatNo}}{{CompatNo}}{{CompatNo}}
-
-
- - - - - - - - - - - - - - - - - - - - - -
ВозможностьAndroidChrome для AndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Базовая поддержка{{CompatNo}}{{CompatNo}}{{CompatGeckoMobile("1.0")}}{{CompatNo}}{{CompatNo}}{{CompatNo}}
-
diff --git a/files/ru/web/javascript/reference/global_objects/object/observe/index.html b/files/ru/web/javascript/reference/global_objects/object/observe/index.html deleted file mode 100644 index 25fe9c879b..0000000000 --- a/files/ru/web/javascript/reference/global_objects/object/observe/index.html +++ /dev/null @@ -1,142 +0,0 @@ ---- -title: Object.observe() -slug: Web/JavaScript/Reference/Global_Objects/Object/observe -tags: - - ECMAScript7 - - Experimental - - JavaScript - - Method - - Object - - Reference -translation_of: Archive/Web/JavaScript/Object.observe ---- -
{{JSRef("Global_Objects", "Object")}}
- -

Сводка

- -

Метод Object.observe() используется для асинхронного обзора изменений в объекте. Он предоставляет поток изменений в порядке их возникновения.

- -

Синтаксис

- -
Object.observe(obj, callback)
- -

Параметры

- -
-
obj
-
Обозреваемый объект.
-
callback
-
Функция, вызываемая при возникновении изменений в объекте, принимает следующий аргумент: -
-
changes
-
Массив объектов, представляющих одно изменение. Объекты с изменениями содержат следующие свойства: -
    -
  • name: имя изменённого свойства.
  • -
  • object: изменённый объект после изменения.
  • -
  • type: строка, указывающая тип произошедшего изменения. Может принимать одно из значений: "add", "update" или "delete".
  • -
  • oldValue: только для типов "update" и "delete". Значение до изменения.
  • -
-
-
-
-
- -

Описание

- -

Функция callback вызывается каждый раз при возникновении изменений в объекте obj с массивом всех изменений в порядке их возникновения.

- -

Примеры

- -

Пример: журналирование всех трёх типов изменений

- -
var obj = {
-  foo: 0,
-  bar: 1
-};
-
-Object.observe(obj, function(changes) {
-  console.log(changes);
-});
-
-obj.baz = 2;
-// [{name: 'baz', object: <obj>, type: 'add'}]
-
-obj.foo = 'hello';
-// [{name: 'foo', object: <obj>, type: 'update', oldValue: 0}]
-
-delete obj.baz;
-// [{name: 'baz', object: <obj>, type: 'delete', oldValue: 2}]
-
- -

Пример: привязка данных

- -
// Пользовательская модель
-var user = {
-  id: 0,
-  name: 'Брендан Айк',
-  title: 'М-р.'
-};
-
-// Создаёт приветствие для пользователя
-function updateGreeting() {
-  user.greeting = 'Здравствуйте, ' + user.title + ' ' + user.name + '!';
-}
-updateGreeting();
-
-Object.observe(user, function(changes) {
-  changes.forEach(function(change) {
-    // Любое изменение имени или обращения обновит привествие
-    if (change.name === 'name' || change.name === 'title') {
-      updateGreeting();
-    }
-  });
-});
-
- -

 

- -

Custom change type

- -
// A point on a 2D plane
-var point = {x: 0, y: 0, distance: 0};
-
-function setPosition(pt, x, y) {
-  // Performing a custom change
-  Object.getNotifier(pt).performChange('reposition', function() {
-    var oldDistance = pt.distance;
-    pt.x = x;
-    pt.y = y;
-    pt.distance = Math.sqrt(x * x + y * y);
-    return {oldDistance: oldDistance};
-  });
-}
-
-Object.observe(point, function(changes) {
-  console.log('Distance change: ' + (point.distance - changes[0].oldDistance));
-}, ['reposition']);
-
-setPosition(point, 3, 4);
-// Distance change: 5
- -

 

- -

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

- -

Черновое предложение к обсуждению для ECMAScript 7.

- -

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

- -
 
- - - -

{{Compat("javascript.builtins.Object.observe")}}

- -

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

- - diff --git a/files/ru/web/javascript/reference/global_objects/object/parent/index.html b/files/ru/web/javascript/reference/global_objects/object/parent/index.html deleted file mode 100644 index d9e5c1ddd9..0000000000 --- a/files/ru/web/javascript/reference/global_objects/object/parent/index.html +++ /dev/null @@ -1,75 +0,0 @@ ---- -title: Object.prototype.__parent__ -slug: Web/JavaScript/Reference/Global_Objects/Object/parent -tags: - - JavaScript - - Object - - Obsolete - - Property - - Prototype -translation_of: Archive/Web/JavaScript/Object.parent ---- -
- {{JSRef("Global_Objects", "Object")}} {{obsolete_header("2")}}
-

Сводка

-

Свойство __parent__ использовалось для указания контекста объекта, но было удалено.

-

Синтаксис

-
obj.__parent__
-

Описание

-

Для объектов верхнего уровня, это, например, окно.

-

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

-

Не является частью какой-либо спецификации.

-

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

-
- {{CompatibilityTable}}
-
- - - - - - - - - - - - - - - - - - - -
ВозможностьChromeFirefox (Gecko)Internet ExplorerOperaSafari
Базовая поддержка{{CompatNo}}{{CompatNo}}{{CompatNo}}{{CompatNo}}{{CompatNo}}
-
-
- - - - - - - - - - - - - - - - - - - - - -
ВозможностьAndroidChrome для AndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Базовая поддержка{{CompatNo}}{{CompatNo}}{{CompatNo}}{{CompatNo}}{{CompatNo}}{{CompatNo}}
-
-

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

- diff --git a/files/ru/web/javascript/reference/global_objects/object/unobserve/index.html b/files/ru/web/javascript/reference/global_objects/object/unobserve/index.html deleted file mode 100644 index bf3ef676f3..0000000000 --- a/files/ru/web/javascript/reference/global_objects/object/unobserve/index.html +++ /dev/null @@ -1,97 +0,0 @@ ---- -title: Object.unobserve() -slug: Web/JavaScript/Reference/Global_Objects/Object/unobserve -translation_of: Archive/Web/JavaScript/Object.unobserve ---- -
{{JSRef}} {{obsolete_header}}
- -

Метод Object.unobserve() удаляет наблюдатель, который был добавлен с помощью {{jsxref("Object.observe()")}}. Вы можете использовать {{jsxref("Proxy")}} вместо данного метода.

- -

Синтаксис

- -
Object.unobserve(obj, callback)
- -

Параметры

- -
-
obj
-
Объект, за которым необходимо прекратить наблюдение.
-
callback
-
Ссылка на наблюдатель, который нужно остановить на obj.
-
- -

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

- -

Указанный объект.

- -

Описание

- -

Object.unobserve() вызывается после {{jsxref("Object.observe()")}}, чтобы удалить наблюдатель на объекте.

- -

В callback нужно передавать ссылку на функцию, которая не является анонимной. Если вызвать Object.unobserve() с анонмной функцией в callback, то ни один наблюдатель не будет удалён.

- -

Примеры

- -

Удаление наблюдателя с объекта

- -
var obj = {
-  foo: 0,
-  bar: 1
-};
-
-var observer = function(changes) {
-  console.log(changes);
-}
-
-Object.observe(obj, observer);
-​
-obj.newProperty = 2;
-// [{name: 'newProperty', object: <obj>, type: 'add'}]
-
-Object.unobserve(obj, observer);
-
-obj.foo = 1;
-// callback не был вызван
- -

Вызов с анонимной функцией

- -
var person = {
-  name: 'Ahmed',
-  age: 25
-};
-
-Object.observe(person, function(changes) {
-  console.log(changes);
-});
-
-person.age = 40;
-// [{name: 'age', object: <obj>, oldValue: 25, type: 'update'}]
-
-Object.unobserve(person, function(changes) {
-  console.log(changes);
-});
-
-person.age = 63;
-// [{name: 'age', object: <obj>, oldValue: 40, type: 'update'}]
-// callback был вызван
-
- -

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

- -

Strawman proposal specification.

- -

Browser compatibility

- -
- - -

{{Compat("javascript.builtins.Object.unobserve")}}

-
- -

See also

- - diff --git a/files/ru/web/javascript/reference/global_objects/object/unwatch/index.html b/files/ru/web/javascript/reference/global_objects/object/unwatch/index.html deleted file mode 100644 index e862406f3d..0000000000 --- a/files/ru/web/javascript/reference/global_objects/object/unwatch/index.html +++ /dev/null @@ -1,93 +0,0 @@ ---- -title: Object.prototype.unwatch() -slug: Web/JavaScript/Reference/Global_Objects/Object/unwatch -tags: - - JavaScript - - Method - - Non-standard - - Object - - Prototype -translation_of: Archive/Web/JavaScript/Object.unwatch ---- -
- {{JSRef("Global_Objects", "Object")}}
-
-

Предупреждение: обычно, при возможности, вам следует избегать использования unwatch() и {{jsxref("Object.prototype.watch", "watch()")}}. Эти два метода реализованы только в Gecko, и они, в основном, предназначены только для отладочных целей. Кроме того, использование точек наблюдения серьёзно бъёт по производительности, что особенно заметно при использовании их на глобальных объектах, например window. Обычно вместо них вы можете использовать сеттеры и геттеры или прокси. Для более подробной информации смотрите раздел {{anch("Browser_compatibility", "Совместимость с браузерами")}}.

-
-

Сводка

-

Метод unwatch() удаляет точку наблюдения, установленную методом {{jsxref("Object.prototype.watch", "watch()")}}.

-

Синтаксис

-
obj.unwatch(prop)
-

Параметры

-
-
- prop
-
- Имя свойства объекта, чьи изменения вы хотите прекратить отслеживать.
-
-

Описание

-

Отладчик JavaScript имеет функциональность, аналогичную предоставляемой этим методом, а также и другие возможности отладки. Информацию по отладчику можно получить в статье про Venkman.

-

По умолчанию, этот метод наследуется каждым объектом, произошедшим от {{jsxref("Global_Objects/Object", "Object")}}.

-
-

Примечание: причина, по которой метод unwatch() принимает единственным параметром только имя свойства prop в том, что для метода {{jsxref("Object.watch", "watch()")}} разрешён только один обработчик.

-
-

Примеры

-

Смотрите метод {{jsxref("Object.watch", "watch()")}}.

-

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

-

Не является частью какой-либо спецификации. Реализована в JavaScript 1.2.

-

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

-
- {{CompatibilityTable}}
-
- - - - - - - - - - - - - - - - - - - -
ВозможностьChromeFirefox (Gecko)Internet ExplorerOperaSafari
Базовая поддержка{{CompatNo}}{{CompatVersionUnknown}}{{CompatNo}}{{CompatNo}}{{CompatNo}}
-
-
- - - - - - - - - - - - - - - - - - - - - -
ВозможностьAndroidChrome для AndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Базовая поддержка{{CompatNo}}{{CompatNo}}{{CompatVersionUnknown}}{{CompatNo}}{{CompatNo}}{{CompatNo}}
-
-
-

Примечание: вызов unwatch() на объекте {{domxref("Document")}}, начиная с Firefox 23, выбрасывает исключение {{jsxref("Global_Objects/TypeError", "TypeError")}} ({{bug(903332)}}). Эта регрессия была поправлена в Firefox 27.

-
-

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

- diff --git a/files/ru/web/javascript/reference/global_objects/object/watch/index.html b/files/ru/web/javascript/reference/global_objects/object/watch/index.html deleted file mode 100644 index 8f4a3d5b99..0000000000 --- a/files/ru/web/javascript/reference/global_objects/object/watch/index.html +++ /dev/null @@ -1,168 +0,0 @@ ---- -title: Object.prototype.watch() -slug: Web/JavaScript/Reference/Global_Objects/Object/watch -tags: - - JavaScript - - Method - - Non-standard - - Object - - Prototype -translation_of: Archive/Web/JavaScript/Object.watch ---- -
- {{JSRef("Global_Objects", "Object")}}
-
-

Предупреждение: обычно, при возможности, вам следует избегать использования watch() и {{jsxref("Object.prototype.unwatch", "unwatch()")}}. Эти два метода реализованы только в Gecko, и они, в основном, предназначены только для отладочных целей. Кроме того, использование точек наблюдения серьёзно бъёт по производительности, что особенно заметно при использовании их на глобальных объектах, например window. Обычно вместо них вы можете использовать сеттеры и геттеры или прокси. Для более подробной информации смотрите раздел {{anch("Browser_compatibility", "Совместимость с браузерами")}}. Также, не путайте {{jsxref("Object.prototype.watch", "Object.watch")}} с {{jsxref("Object.prototype.observe", "Object.observe")}}.

-
-

Сводка

-

Метод watch() следит за присваиванием свойству значений и запускает указанную функцию, когда это происходит.

-

Синтаксис

-
obj.watch(prop, handler)
-

Параметры

-
-
- prop
-
- Имя свойства объекта, чьи изменения вы хотите отслеживать.
-
- handler
-
- Функция, вызывающаяся при изменении значения указанного свойства.
-
-

Описание

-

Следит за присваиваниями свойству prop в этом объекте, вызывая функцию handler(prop, oldval, newval) всякий раз, когда свойство prop устанавливается и сохраняет возвращённое значение в этом свойстве. Точка наблюдения может отфильтровывать (или отменять) присваивание значения, возвращая изменённое новое значение newval (или старое значение oldval).

-

Если вы удалите свойство, для которого была установлена точка наблюдения, эта точка наблюдения не будет отключена. Если вы позже вновь создадите это свойство, точка наблюдения продолжит работать.

-

Для удаления точки наблюдения используйте метод {{jsxref("Object.unwatch", "unwatch()")}}. По умолчанию, метод watch наследуется каждым объектом, произошедшим от {{jsxref("Global_Objects/Object", "Object")}}.

-

Отладчик JavaScript имеет функциональность, аналогичную предоставляемой этим методом, а также и другие возможности отладки. Информацию по отладчику можно получить в статье про Venkman.

-

В Firefox, функция handler вызывает только при присваивании из скрипта, не из встроенного кода. Например, window.watch('location', myHandler) не вызовет myHandler, если пользователь щёлкнет по ссылке с якорем в текущем документе. Однако, выражение window.location += '#myAnchor' вызовет myHandler.

-
-

Примечание: вызов watch() на объекте для определённого свойства перезапишет любые ранее назначенные на него обработчики.

-
-

Примеры

-

Пример: использование watch и unwatch

-
var o = { p: 1 };
-
-o.watch('p', function (id, oldval, newval) {
-  console.log('o.' + id + ' изменено с ' + oldval + ' на ' + newval);
-  return newval;
-});
-
-o.p = 2;
-o.p = 3;
-delete o.p;
-o.p = 4;
-
-o.unwatch('p');
-o.p = 5;
-
-

Этот скрипт выведет следующее:

-
o.p изменено с 1 на 2
-o.p изменено с 2 на 3
-o.p изменено с undefined на 4
-
-

Пример: использование watch для проверки свойств объекта

-

Вы можете использовать watch для проверки присваивания к любым свойствам объекта. Этот пример гарантирует, что каждый человек имеет допустимое имя и возраст между 0 и 200.

-
Person = function(name, age) {
-  this.watch('age', Person.prototype._isValidAssignment);
-  this.watch('name', Person.prototype._isValidAssignment);
-  this.name = name;
-  this.age = age;
-};
-
-Person.prototype.toString = function() {
-  return this.name + ', ' + this.age;
-};
-
-Person.prototype._isValidAssignment = function(id, oldval, newval) {
-  if (id === 'name' && (!newval || newval.length > 30)) {
-    throw new RangeError('недопустимое имя для ' + this);
-  }
-  if (id === 'age'  && (newval < 0 || newval > 200)) {
-    throw new RangeError('недопустимый возраст для ' + this);
-  }
-  return newval;
-}
-
-will = new Person('Уилл', 29);
-print(will);   // Уилл, 29
-
-try {
-  will.name = '';
-} catch (e) {
-  print(e);
-}
-
-try {
-  will.age = -4;
-} catch (e) {
-  print(e);
-}
-
-

Этот скрипт выведет следующее:

-
Уилл, 29
-RangeError: недопустимое имя для Уилл, 29
-RangeError: недопустимый возраст для Уилл, 29
-
-

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

-

Не является частью какой-либо спецификации. Реализована в JavaScript 1.2.

-

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

- -
- {{CompatibilityTable}}
-
- - - - - - - - - - - - - - - - - - - -
ВозможностьChromeFirefox (Gecko)Internet ExplorerOperaSafari
Базовая поддержка{{CompatNo}}{{CompatVersionUnknown}}{{CompatNo}}{{CompatNo}}{{CompatNo}}
-
-
- - - - - - - - - - - - - - - - - - - - - -
ВозможностьAndroidChrome для AndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Базовая поддержка{{CompatNo}}{{CompatNo}}{{CompatVersionUnknown}}{{CompatNo}}{{CompatNo}}{{CompatNo}}
-
-
-

Примечание: вызов watch() на объекте {{domxref("Document")}}, начиная с Firefox 23, выбрасывает исключение {{jsxref("Global_Objects/TypeError", "TypeError")}} ({{bug(903332)}}). Эта регрессия была поправлена в Firefox 27.

-
-

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

- -- cgit v1.2.3-54-g00ecf