- Операторы
- Управляющие инструкции
- JS Объекты
- Array
- Boolean
- Date
- Error
- Function
- Global
- JSON
- Math
- Number
- объект Object
- constructor
- prototype
- create
- defineProperties
- defineProperty
- entries
- freeze
- fromEntries
- getOwnPropertyDescriptor
- getOwnPropertyNames
- getPrototypeOf
- isExtensible
- isFrozen
- isSealed
- keys
- preventExtensions
- seal
- hasOwnProperty
- isPrototypeOf
- toLocaleString
- toString
- valueOf
- values
- Свойства данных и свойства доступа
- Использование конструкторов для определения типов
- RegExp
- String
- Symbol
- Итераторы и генераторы
- Map и WeakMap
- Set и WeakSet
- Локализация
- браузер BOM
- HTML DOM
- События
- HTML Объекты
- Промисы, async/await
- Сетевые запросы
- Бинарные данные и файлы
- Разное
объект Object
Конструктор объектов, предоставляющий функциональные возможности, общие для всех JavaScript объектов.
Синтаксис
obj = new Object(value)
Параметры
- obj
- Обязательный. Имя переменной, которой присваивается объект Object.
- value
- Необязательный. Любой из примитивных типов данных JavaScript (число, логическое значение или строка). Если параметр
value
является объектом, объект возвращается без изменений. Если параметрvalue
имеет значениеnull
, не определен или не указан, создается объект без содержимого.
Комментарии
Объект Object присутствует во всех остальных объектах JavaScript; все его методы и свойства доступны во всех остальных объектах. Методы могут заново определяться в пользовательских объектах и вызываются JavaScript в соответствующее время. Метод toString
является примером часто переопределяемого метода Object.
Все методы и свойства объекта Object доступны для всех объектов.
Свойства
Методы
Метод | Описание |
---|---|
constructor | Ссылается на функцию-конструктор, которая была использована при создании объекта. |
prototype | Ссылается на объект, являющийся прототипом для объектов типа Object. Данное свойство используется интерпретатором, когда функция используется как конструктор при создании нового объекта. Любой объект, созданный с помощью конструктора, наследует все свойства объекта, на который ссылается свойство prototype. |
Функции
Функции | Описание |
---|---|
create() | Создает объект с указанным прототипом, и, при необходимости, содержащий указанные свойства. |
defineProperties() | Добавляет одно или несколько свойств в объект или изменяет уже существующие свойства. |
defineProperty() | Добавляет свойство в объект или изменяет уже существующее. |
entries() | Возвращает массив, содержащий имена всех перечисляемых свойств данного объекта. |
freeze() | Замораживает объект: предотвращает изменение значений существующих свойств и исключает добавление новых свойств. |
fromEntries() | Преобразует список пар ключ-значение в объект. |
getOwnPropertyDescriptor() | Возвращает описание данных свойства или метода. |
getOwnPropertyNames() | Возвращает массив, содержащий имена всех перечисляемых и неперечисляемых свойств и методов данного объекта. |
getPrototypeOf() | Возвращает прототип указанного объекта. |
hasOwnProperty() | Возвращает значение true, только если свойство с заданным именем существует в экземпляре объекта, а не прототипе. |
isExtensible() | Возвращает значение, указывающее, могут ли быть добавлены новые свойства в объект. |
isFrozen() | Возвращает значение true , если объект был заморожен. |
isPrototypeOf() | Возвращает логическое значение, указывающее является ли передаваемый объект частью цепочки прототипов для текущего объекта. |
isSealed() | Возвращает значение true , если объект был запечатан. |
keys() | Возвращает массив, содержащий имена всех перечисляемых свойств данного объекта. |
preventExtensions() | Предотвращает добавление новых свойств в объект. |
seal() | Запечатывает объект: предотвращает возможность удаление, изменения и добавления свойств объекта. |
toLocaleString() | Возвращает строку, представляющую объект. Этот метод предназначен для переопределения в производных объектах для языкового стандарта конкретных целей. |
toString() | Возвращает строку, представляющую объект. |
valueOf() | Возвращает примитивное значение указанного объекта. |
values() | Возвращает массив, содержащий значения всех перечисляемых свойств данного объекта. |
constructor
Задает функцию, которая создает объект.
Синтаксис
object.constructor
Комментарии
Необходимый параметр object
представляет собой имя объекта или функции.
Свойство constructor является членом прототипа каждого объекта, у которого есть прототип. Это включает все встроенные объекты JavaScript, за исключением объектов Global
и Math
. Свойство constructor содержит ссылку на функцию, которая создает экземпляры данного конкретного объекта.
Пример
В следующем примере кода демонстрируется использование свойства constructor.
// A constructor function. function MyObj() { this.number = 1; } var x = new String("Hi"); if (x.constructor == String) alert("Object is a String."); var y = new MyObj; if (y.constructor == MyObj) alert("Object constructor is MyObj."); // Output: // Object is a String. // Object constructor is MyObj.
prototype
Возвращает ссылку на прототип класса объектов.
Синтаксис
objectName.prototype
Описание, комментарии, примеры
Аргумент objectName
представляет собой имя объекта.
Свойство prototype используется для предоставления базового набора функциональных возможностей классу объектов. Новые экземпляры объекта наследуют поведение прототипа, присвоенного этому объекту.
Например, чтобы добавить в объект Array
метод, возвращающий значение наибольшего элемента массива, объявите функцию, добавьте ее в свойство Array.prototype
, а затем используйте ее.
function array_max( ){ var i, max = this[0]; for (i = 1; i < this.length; i++) { if (max < this[i]) max = this[i]; } return max; } Array.prototype.max = array_max; var myArray = new Array(7, 1, 3, 11, 25, 9 ); alert(myArray.max()); // Output: // 25
Все встроенные объекты JavaScript имеют свойство prototype, которое доступно только для чтения. К прототипу можно добавлять свойства и методы, но невозможно присвоить объекту другой прототип. Однако пользовательским объектам можно присваивать новый прототип.
create
Создает объект, который имеет указанный прототип и (необязательно) содержит указанные свойства.
Синтаксис
Object.create(prototype, descriptors)
Параметры
- prototype
- Обязательное. Объект для использования в качестве прототипа. Может принимать значение
null
. - descriptors
- Необязательный параметр. Объект JavaScript, содержащий один или несколько дескрипторов свойств.
Свойство данных — это свойство, которое может получать и задавать значение. Дескриптор свойства данных содержит атрибут
value
, а также атрибутыwritable
,enumerable
иconfigurable
. Если последние 3 атрибута не заданы, по умолчанию они получают значениеfalse
. Свойство метода доступа вызывает предоставленную пользователем функцию при каждом получении или задании значения. Дескриптор свойства метода доступа содержит атрибутset
, атрибутget
или оба эти атрибута. Для получения дополнительной информации см. Object.defineProperty.
Возвращаемое значение
Новый объект с указанным внутренним прототипом, содержащий указанные свойства, если они были предоставлены.
Исключения
Исключение TypeError
создается при выполнении любого из следующих условий:
- Аргумент
prototype
не является объектом и не имеет значениеnull
. - Дескриптор в аргументе
descriptors
имеет атрибутvalue
илиwritable
и атрибутget
илиse
t. - Дескриптор в аргументе
descriptors
имеет атрибутget
илиset
, который не является функцией.
Комментарии
Эту функцию можно использовать с параметром null
prototype
, чтобы прекратить использование цепи прототипов. Созданный объект не будет иметь прототипа.
Примеры
В следующем примере создается объект с использованием прототипа null и добавлением двух перечислимых свойств.
var newObj = Object.create(null, { size: { value: "large", enumerable: true }, shape: { value: "round", enumerable: true } }); alert( newObj.size + '\n'+ newObj.shape + '\n'+ Object.getPrototypeOf(newObj)); // Output: // large // round // null
В следующем примере создается объект, имеющий тот же внутренний прототип, что и объект Object
. Как видно, он имеет тот же прототип, что и объект, созданный с использованием литерала объекта. Функция Object.getPrototypeOf получает прототип исходного объекта. Чтобы получить дескриптор свойства объекта, можно использовать функцию Object.getOwnPropertyDescriptor.
var firstLine = { x: undefined, y: undefined }; var secondLine = Object.create(Object.prototype, { x: { value: undefined, writable: true, configurable: true, enumerable: true }, y: { value: undefined, writable: true, configurable: true, enumerable: true } }); alert( "first line prototype = " + Object.getPrototypeOf(firstLine) + '\n'+ "second line prototype = " + Object.getPrototypeOf(secondLine)); // Output: // first line prototype = [object Object] // second line prototype = [object Object]
В следующем примере создается объект, имеющий тот же внутренний прототип, что и объект Shape.
// Create the shape object. var Shape = { twoDimensional: true, color: undefined, hasLineSegments: undefined }; var Square = Object.create(Object.getPrototypeOf(Shape));
defineProperties
Добавляет одно или несколько свойств к объекту, и/или изменяет атрибуты имеющихся свойств.
Синтаксис
object.defineProperties(object, descriptors)
Параметры
- object
- Обязательный параметр. Объект, для которого добавляется или изменяется свойства. Это может быть собственным объектом JavaScript или объектом DOM.
- descriptors
- Обязательный параметр. Объект JavaScript, содержащий один или несколько объектов дескриптора. Каждый объект дескриптора описывает свойство данных или свойство доступа.
Возвращаемое значение
Объект, переданный функции.
Комментарии
Аргумент descriptors
представляет собой объект, содержащий один или несколько объектов дескриптора.
Свойство данных — это свойство, которое может хранить и извлекать значения. Дескриптор свойства данных содержит атрибут value
, атрибут writable
или их обоих. Для получения дополнительной информации см. Свойства данных и свойства доступа.
Свойство доступа вызывает предоставленную пользователем функцию каждый раз, когда происходит установка или извлечение значения свойства. Дескриптор свойства доступа содержит атрибут set
, атрибут get
или их обоих.
Если объект уже имеет свойство с указанными именем, то атрибуты свойства изменяются. Для получения дополнительной информации см. defineProperty.
Для создания объекта и добавления свойств к новому объекту можно использовать фнкцию create.
Примеры
В следующем примере функция defineProperties добавляет свойство данных и свойство доступа к определяемому пользователем объекту.
В примере используется литерал объекта для создания объекта descriptors
с объектами дескриптора newDataProperty
и newAccessorProperty
.
var newLine = '\n', str=''; var obj = {}; Object.defineProperties(obj, { newDataProperty: { value: 101, writable: true, enumerable: true, configurable: true }, newAccessorProperty: { set: function (x) { str += "in property set accessor" + newLine; this.newaccpropvalue = x; }, get: function () { str += "in property get accessor" + newLine; return this.newaccpropvalue; }, enumerable: true, configurable: true }}); // Set the accessor property value. obj.newAccessorProperty = 10; str += "newAccessorProperty value: " + obj.newAccessorProperty + newLine; alert (str) // Output: // in property set accessor // in property get accessor // newAccessorProperty value: 10
Как и в предыдущем примере, в следующем примере показано динамическое добавление свойства вместо добавления с литералом объекта.
var newLine = '\n'; str=''; // Create the descriptors object. var descriptors = new Object(); // Add a data property descriptor to the descriptors object. descriptors.newDataProperty = new Object(); descriptors.newDataProperty.value = 101; descriptors.newDataProperty.writable = true; descriptors.newDataProperty.enumerable = true; descriptors.newDataProperty.configurable = true; // Add an accessor property descriptor to the descriptors object. descriptors.newAccessorProperty = new Object(); descriptors.newAccessorProperty.set = function (x) { str += "in property set accessor" + newLine; this.newaccpropvalue = x; }; descriptors.newAccessorProperty.get = function () { str += "in property get accessor" + newLine; return this.newaccpropvalue; }; descriptors.newAccessorProperty.enumerable = true; descriptors.newAccessorProperty.configurable = true; // Call the Object.defineProperties function. var obj = new Object(); Object.defineProperties(obj, descriptors); // Set the accessor property value. obj.newAccessorProperty = 10; str += "newAccessorProperty value: " + obj.newAccessorProperty + newLine; alert(str); // Output: // in property get accessor // newAccessorProperty value: 10
Чтобы изменить атрибуты свойства для объекта, добавьте следующий код. Функция Object.defineProperties
изменяет атрибут writable
объекта дескриптора newDataProperty
и атрибут enumerable
объекта дескриптора newAccessorProperty
. Она добавляет anotherDataProperty
к объекту, поскольку это имя свойства еще не существует.
Object.defineProperties(obj, { newDataProperty: { writable: false }, newAccessorProperty: { enumerable: false }, anotherDataProperty: { value: "abc" } });
defineProperty
Добавляет свойство в объект или изменяет атрибуты существующего свойства.
Синтаксис
Object.defineProperty(object, propertyname, descriptor)
Параметры
- object
- Обязательный. Объект, для которого нужно добавить или изменить свойство. Это может быть собственный объект JavaScript (встроенный или определяемый пользователем) или объект DOM.
- propertyname
- Обязательный. Строка, содержащая имя свойства.
- descriptor
- Обязательный. Дескриптор свойства. Это может быть свойство данных или свойство метода доступа.
Возвращаемое значение
Измененный объект.
Комментарии
Функцию defineProperty можно использовать для выполнения следующих задач:
- Добавление нового свойства в объект. Это происходит, если у объекта нет свойства с указанным именем.
- Изменение атрибутов существующего свойства. Это происходит, если у объекта уже есть свойство с указанным именем.
Определение свойства содержится в объекте дескриптора, который описывает атрибуты свойства данных или свойства метода доступа. Объект дескриптора является параметром функции defineProperty.
Добавить или изменить сразу несколько свойств позволяет Функция defineProperties.
Исключения
Исключение TypeError
возникает при выполнении любого из следующих условий:
- Аргумент
object
не является объектом. - Объект не является расширяемым, а указанное имя свойства не существует.
- Параметр
descriptor
имеет атрибутvalue
илиwritable
, а такжеget
илиset
. - Параметр
descriptor
имеет атрибутget
илиset
, который не является функцией или неопределенным. - Указанное имя свойства уже существует, существующее свойство имеет атрибут
configurable
со значениемfals
e, аdescriptor
содержит один или несколько атрибутов, которые отличаются от атрибутов в существующем свойстве. Однако если существующее свойство имеет атрибутconfigurable
со значениемfalse
и атрибутwritable
со значениемtrue
, атрибутvalue
илиwritable
может быть иным.
Примеры
В следующем примере функция defineProperty добавляет свойство данных в определяемый пользователем объект.
var newLine = "\n", str=''; // Create a user-defined object. var obj = {}; // Add a data property to the object. Object.defineProperty(obj, "newDataProperty", { value: 101, writable: true, enumerable: true, configurable: true }); // Set the property value. obj.newDataProperty = 102; str += "Property value: " + obj.newDataProperty + newLine; // вывести список свойств объекта var names = Object.getOwnPropertyNames(obj); for (var i = 0; i < names.length; i++) { var prop = names[i]; str += prop + ': ' + obj[prop]+'\n'; } // Изменение свойства данных // Modify the writable attribute of the property. Object.defineProperty(obj, "newDataProperty", { writable: false }); // List the property attributes by using a descriptor. // Get the descriptor with Object.getOwnPropertyDescriptor. var descriptor = Object.getOwnPropertyDescriptor(obj, "newDataProperty"); for (var prop in descriptor) { str += prop + ': ' + descriptor[prop]+'\n'; } alert (str); /* Output: Property value: 102 newDataProperty: 102 writable: false value: 102 configurable: true enumerable: true */
В следующем примере функция defineProperty добавляет свойство метода доступа в определяемый пользователем объект.
var newLine = "\n", str=''; // Create a user-defined object. var obj = {}; // Add an accessor property to the object. Object.defineProperty(obj, "newAccessorProperty", { set: function (x) { str += "in property set accessor" + newLine; this.newaccpropvalue = x; }, get: function () { str += "in property get accessor" + newLine; return this.newaccpropvalue; }, enumerable: true, configurable: true }); // Set the property value. obj.newAccessorProperty = 30; str += "Property value: " + obj.newAccessorProperty + newLine; // Изменить атрибут свойства для объекта // Параметр descriptor содержит только определение метода доступа get. // Другие атрибуты свойства остаются неизменными. // Modify the get accessor. Object.defineProperty(obj, "newAccessorProperty", { get: function () { return this.newaccpropvalue; } }); // List the property attributes by using a descriptor. // Get the descriptor with Object.getOwnPropertyDescriptor. var descriptor = Object.getOwnPropertyDescriptor(obj, "newAccessorProperty"); for (var prop in descriptor) { str += prop + ': ' + descriptor[prop] + '\n'; } alert (str); /* Output: in property set accessor in property get accessor Property value: 30 get: function () { return this.newaccpropvalue; } set: function (x) { str += "in property set accessor" + newLine; this.newaccpropvalue = x; } configurable: true enumerable: true */
В следующем примере показано, как с помощью функции getOwnPropertyDescriptor
настраивать встроенные свойства DOM для получения и изменения дескриптора свойства для свойства. В данном случае код должен содержать элемент DIV с идентификатором div.
// Get the querySelector property descriptor. var descriptor = Object.getOwnPropertyDescriptor(Element.prototype, "querySelector"); // Make the property read-only. descriptor.value = "query"; descriptor.writable = false; // Apply the changes to the Element prototype. Object.defineProperty(Element.prototype, "querySelector", descriptor); // Get a DOM element from the HTML body. var elem = document.getElementById("div"); // Attempt to change the value. This causes the revised value attribute to be called. elem.querySelector = "anotherQuery"; alert(elem.querySelector); // Output: // query
entries
Возвращает массив собственных перечисляемых свойств указанного объекта в формате [key, value].
Синтаксис
Object.entries(object)
Параметры
- object
- Обязательный. Объект, чьи перечислимые свойства будут возвращены в виде массива [key, value]
Возвращаемое значение
Object.entries() возвращает массив, элементами которого являются массивы, соответствующие перечисляемому свойству пары [key, value], найденной прямо в object. Порядок свойств тот же, что и при прохождении циклом по свойствам объекта вручную.
Пример
let obj = { foo: "bar", baz: 42 }; // Преобразование Object в Map let map = new Map(Object.entries(obj)); alert( Object.entries(obj) + // [ ['foo', 'bar'], ['baz', 42] ] '\n' + map );
freeze
Предотвращает изменение существующих атрибутов и значений свойств и исключает добавление новых свойств.
Синтаксис
Object.freeze(object)
Параметры
- object
- Обязательный. Объект, атрибуты которого требуется заблокировать.
Возвращаемое значение
Объект, переданный функции.
Если аргумент object
не является объектом, вызывается исключение TypeError
.
Описание, комментарии, примеры
Функция freeze выполняет следующие действия.
- Делает объект нерасширяемым, чтобы к нему невозможно было добавить новые свойства.
- Устанавливает для атрибута
configurable
значениеfalse
для всех свойств объекта. Если атрибутconfigurable
имеет значениеfalse
, атрибуты свойства невозможно изменить, а свойство не может быть удалено. - Устанавливает для атрибута
writable
значениеfalse
для всех свойств данных объекта. Когда атрибутwritable
имеет значениеfalse
, значение свойства данных изменить нельзя.
Дополнительные сведения о задании атрибутов свойств см. defineProperty. Чтобы получить атрибуты свойства, можно использовать функцию getOwnPropertyDescriptor
Следующие связанные функции предотвращают изменение атрибутов объекта.
function | Объект становится нерасширяемым. | configurable получает значение false для каждого свойства | writable получает значение false для каждого свойства |
---|---|---|---|
preventExtensions | Да | Нет | Нет |
seal | Да | Да | Нет |
freeze | Да | Да | Да |
Следующие функции возвращают true
, если все условия, отмеченные в следующей таблице, имеют значение true
.
function | Расширяем ли объект? | configurable имеет значение false для всех свойств? | writable имеет значение false для всех свойств данных? |
---|---|---|---|
isExtensible | Да | Нет | Нет |
isSealed | Нет | Да | Да |
isFrozen | Нет | Да | Да |
В следующем примере показано использование функции freeze.
str=''; // Create an object that has two properties. var obj = { pasta: "spaghetti", length: 10 }; // Freeze the object. Object.freeze(obj); // Try to add a new property, and then verify that it is not added. obj.newProp = 50; str += obj.newProp+'\n'; // Try to delete a property, and then verify that it is still present. delete obj.length; str += obj.length+'\n'; // Try to change a property value, and then verify that it is not changed. obj.pasta = "linguini"; str += obj.pasta+'\n'; alert(str); // Output: // undefined // 10 // spaghetti
fromEntries
Метод Object.fromEntries() преобразует список пар ключ-значение в объект.
Синтаксис
Object.fromEntries(iterable)
Параметры
- iterable
- Обязательный. Итерируемый объект, такой как
Array
илиMap
или другие объекты, реализующие iterable протокол.
Возвращаемое значение
Новый объект, свойства которого задаются записями iterable
Описание, комментарии, примеры
Итераторы применяются для организации последовательного доступа к элементам наборов данных - массивам, объектам Set
, Map
, строкам и т.д..Так, благодаря итераторам мы можем перебрать набор данных с помощью цикла for...of
Object.fromEntries() выполняет процедуру, обратную Object.entries()
const entries = new Map([ ['foo', 'bar'], ['baz', 42] ]); const obj = Object.fromEntries(entries); let s=''; for (let p in obj) { s += p+': ' + obj[p]+'\n'; } alert (s);
getOwnPropertyDescriptor
Возвращает дескриптор собственного свойства указанного объекта. Дескриптор собственного свойства определяется в самом объекте, а не наследуется от прототипа.
Синтаксис
Object.getOwnPropertyDescriptor(object, propertyname)
Параметры
- object
- Обязательный. Объект, содержащий свойство.
- propertyname
- Обязательный. Имя свойства.
Возвращаемое значение
Дескриптор свойства.
Комментарии
Функция getOwnPropertyDescriptor позволяет получить объект дескриптора, описывающий атрибуты свойства.
Функция defineProperty
используется для добавления или изменения свойств.
Примеры
Код в следующем примере возвращает дескриптор свойства данных и использует его, чтобы сделать свойство доступным только для чтения.
// Create a user-defined object. var obj = {}, str=''; // Add a data property. obj.newDataProperty = "abc"; // Get the property descriptor. var descriptor = Object.getOwnPropertyDescriptor(obj, "newDataProperty"); // Change a property attribute. descriptor.writable = false; Object.defineProperty(obj, "newDataProperty", descriptor); // Чтобы вывести список атрибутов свойства, добавим следующий код. // Get the descriptor from the object. var desc2 = Object.getOwnPropertyDescriptor(obj, "newDataProperty"); // List the descriptor attributes. for (var prop in desc2) { str += prop + ': ' + desc2[prop] + '\n'; } alert(str); // Output: // value: abc // writable: false // enumerable: true // configurable: true
getOwnPropertyNames
Возвращает имена собственных свойств объекта. Собственные свойства объекта — те, которые определены непосредственно для этого объекта, а не унаследованы от прототипа объекта. Свойства объекта включают как поля (объекты), так и функции.
Синтаксис
Object.getOwnPropertyNames(object)
Параметры
- object
- Обязательный. Объект, содержащий собственные свойства.
Возвращаемое значение
Массив, содержащий имена собственных свойств объекта.
Если значение, заданное для аргумента object
не является именем объекта, возникает исключение TypeError
.
Комментарии
Метод getOwnPropertyNames возвращает имена как перечислимых, так и неперечислимых свойств и методов. Чтобы вернуть имена только перечислимых свойств и методов, можно использовать keys.
Примеры
В следующем примере создается объект, имеющий три свойства и метод. Затем используется метод getOwnPropertyNames для получения собственных свойств (включая метод) объекта.
var str=''; function Pasta(grain, width, shape) { // Define properties. this.grain = grain; this.width = width; this.shape = shape; this.toString = function () { return (this.grain + ", " + this.width + ", " + this.shape); } } // Create an object. var spaghetti = new Pasta("wheat", 0.2, "circle"); // Get the own property names. var arr = Object.getOwnPropertyNames(spaghetti); alert (arr); // Output: // grain,width,shape,toString
В следующем примере отображаются имена свойств, начинающиеся с буквы "s" объекта spaghetti
, созданного с помощью конструктора Pasta
.
var str=''; function Pasta(grain, size, shape) { this.grain = grain; this.size = size; this.shape = shape; } var spaghetti = new Pasta("wheat", 2, "circle"); var names = Object.getOwnPropertyNames(spaghetti).filter(CheckKey); str += names + '\n'; // Check whether the first character of a string is 's'. function CheckKey(value) { var firstChar = value.substr(0, 1); if (firstChar.toLowerCase() == 's') return true; else return false; } alert (str); // Output: // size,shape
getPrototypeOf
Возвращает прототип объекта.
Синтаксис
Object.getPrototypeOf(object)
Параметры
- object
- Обязательный. Объект, который ссылается на прототип.
Возвращаемое значение
Прототип аргументаobject
. Прототип также является объектом.
Если аргумент object
не является объектом, вызывается исключение TypeError
.
Примеры
В следующем примере показано использование функции getPrototypeOf.
var str=''; // Create a constructor function. function Pasta(grain, width) { this.grain = grain; this.width = width; } // Create an object from the pasta constructor. var spaghetti = new Pasta("wheat", 0.2); // Obtain the prototype from the object. var proto = Object.getPrototypeOf(spaghetti); // Add a property to the prototype and validate that // the original object has the property. proto.foodgroup = "carbohydrates"; str += spaghetti.foodgroup + " "; // Verify that the prototype obtained from the object // is the same as the prototype of the constructor. var result = (proto === Pasta.prototype); str += result + " "; // Verify that prototype obtained from the object // is a prototype of the original object. var result = proto.isPrototypeOf(spaghetti); str += result + '\n'; alert (str); // Output: carbohydrates true true
В следующем примере функция getPrototypeOf используется для проверки типов данных.
var reg = /a/, str=''; var result = (Object.getPrototypeOf(reg) === RegExp.prototype); str += result + " "; var err = new Error("an error"); var result = (Object.getPrototypeOf(err) === Error.prototype); str += result; alert(str); // Output: true true
isExtensible
Возвращает значение, указывающее, можно ли добавить к объекту новые свойства.
Синтаксис
Object.isExtensible(object)
Параметры
- object
- Обязательный. Объект для проверки.
Возвращаемое значение
Значение true
, если объект является расширяемым, т. е. к объекту можно добавлять новые свойства; в противном случае — значение false
.
Если аргумент object
не является объектом, вызывается исключение TypeError
.
Описание, комментарии, примеры
Дополнительные сведения о задании атрибутов свойств см. defineProperty. Чтобы получить атрибуты свойства, можно использовать функцию getOwnPropertyDescriptor.
Следующие связанные функции предотвращают изменение атрибутов объекта.
function | Объект становится нерасширяемым. | configurable получает значение false для каждого свойства | writable получает значение false для каждого свойства |
---|---|---|---|
preventExtensions | Да | Нет | Нет |
seal | Да | Да | Нет |
freeze | Да | Да | Да |
Следующие функции возвращают true
, если все условия, отмеченные в следующей таблице, имеют значение true
.
function | Расширяем ли объект? | configurable имеет значение false для всех свойств? | writable имеет значение false для всех свойств данных? |
---|---|---|---|
isExtensible | Да | Нет | Нет |
isSealed | Нет | Да | Да |
isFrozen | Нет | Да | Да |
В следующем примере показано использование функции isExtensible.
// Create an object that has two properties. var obj = { pasta: "spaghetti", length: 10 }; // Make the object non-extensible. Object.preventExtensions(obj); // Try to add a new property, and then verify that it is not added. obj.newProp = 50; alert(obj.newProp); // Output: undefined
isFrozen
Возвращает значение true
, если существующие атрибуты и значения свойств не могут быть изменены в объекте и новые свойства не могут быть добавлены к объекту.
Синтаксис
Object.isFrozen(object)
Параметры
- object
- Обязательный. Объект для проверки.
Возвращаемое значение
Значение true
, если выполняются все следующие условия:
- Объект является нерасширяемым, т. е. к объекту нельзя добавлять новые свойства.
- Атрибут
configurable
имеет значениеfalse
для всех существующих свойств. - Атрибут
writable
имеет значениеfalse
для всех существующих свойств данных.
Если объект не имеет свойств, функция возвращает значение true
, если объект не является расширяемым.
Если аргумент object
не является объектом, вызывается исключение TypeError
.
Описание, комментарии, примеры
Если атрибутconfigurable
свойства имеет значение false
, атрибуты свойства невозможно изменить, а свойство не может быть удалено. Когда атрибут writable
имеет значение false
, значение свойства данных изменить нельзя. Когда configurable
имеет значение false
, а writable
имеет значение true
, атрибуты value
и writabl
e можно изменить.
Дополнительные сведения о задании атрибутов свойств см. defineProperty . Чтобы получить атрибуты свойства, можно использовать функцию getOwnPropertyDescriptor.
Следующие связанные функции предотвращают изменение атрибутов объекта.
function | Объект становится нерасширяемым. | configurable получает значение false для каждого свойства | writable получает значение false для каждого свойства |
---|---|---|---|
preventExtensions | Да | Нет | Нет |
seal | Да | Да | Нет |
freeze | Да | Да | Да |
Следующие функции возвращают true
, если все условия, отмеченные в следующей таблице, имеют значение true
.
function | Расширяем ли объект? | configurable имеет значение false для всех свойств? | writable имеет значение false для всех свойств данных? |
---|---|---|---|
isExtensible | Да | Нет | Нет |
isSealed | Нет | Да | Да |
isFrozen | Нет | Да | Да |
В следующем примере показано использование функции isFrozen.
var str=''; // Create an object that has two properties. var obj = { pasta: "spaghetti", length: 10 }; // Freeze the object, and verify that it is frozen. Object.freeze(obj); str += Object.isFrozen(obj) + '\n'; // Try to add a new property, and then verify that it is not added. obj.newProp = 50; str += obj.newProp + '\n'; // Try to delete a property, and then verify that it is still present. delete obj.length; str += obj.length + '\n'; // Try to change a property value, and then verify that it is not changed. obj.pasta = "linguini"; str += obj.pasta; alert (str); // Output: // true // undefined // 10 // spaghetti
isSealed
Возвращает значение true
, если существующие атрибуты свойств не могут быть изменены в объекте и новые свойства не могут быть добавлены к объекту.
Синтаксис
Object.isSealed(object)
Параметры
- object
- Обязательный. Объект для проверки.
Возвращаемое значение
Значение true
, если выполняются оба из следующих условий:
- Объект является нерасширяемым, т. е. к объекту нельзя добавлять новые свойства.
- Атрибут
configurable
имеет значениеfalse
для всех существующих свойств.
Если объект не имеет свойств, функция возвращает значение true
, если объект не является расширяемым.
Если аргумент object
не является объектом, вызывается исключение TypeError
.
Описание, комментарии, примеры
Если атрибут configurable
свойства имеет значение false
, атрибуты свойства невозможно изменить, а свойство не может быть удалено. Когда атрибут writable
имеет значение false
, значение свойства данных изменить нельзя. Когда configurable
имеет значение false
, а writable
имеет значение true
, атрибуты value
и writable
можно изменить.
Функция isSealed не использует атрибут writable
свойств для определения возвращаемого значения.
Дополнительные сведения о задании атрибутов свойств см. defineProperty. Чтобы получить атрибуты свойства, можно использовать функцию getOwnPropertyDescriptor.
Следующие связанные функции предотвращают изменение атрибутов объекта.
function | Объект становится нерасширяемым. | configurable получает значение false для каждого свойства | writable получает значение false для каждого свойства |
---|---|---|---|
preventExtensions | Да | Нет | Нет |
seal | Да | Да | Нет |
freeze | Да | Да | Да |
Следующие функции возвращают true
, если все условия, отмеченные в следующей таблице, имеют значение true
.
function | Расширяем ли объект? | configurable имеет значение false для всех свойств? | writable имеет значение false для всех свойств данных? |
---|---|---|---|
isExtensible | Да | Нет | Нет |
isSealed | Нет | Да | Да |
isFrozen | Нет | Да | Да |
В следующем примере показано использование функции isSealed.
var str=''; // Create an object that has two properties. var obj = { pasta: "spaghetti", length: 10 }; // Seal the object, and verify that it is sealed. Object.seal(obj); str += Object.isSealed(obj) + '\n'; // Try to add a new property, and then verify that it is not added. obj.newProp = 50; str += obj.newProp + '\n'; // Try to delete a property, and then verify that it is still present. delete obj.length; str += obj.length + '\n'; alert (str); // Output: // true // undefined // 10
keys
Возвращает имена перечислимых свойств и методов объекта.
Синтаксис
Object.keys(object)
Параметры
- object
- Обязательный. Объект, содержащий все свойства и методы. Это может быть объект, созданный пользователем, или существующий объект DOM.
Возвращаемое значение
Массив, содержащий имена перечислимых свойства и методов объекта.
Если значение, заданное для аргумента object
не является именем объекта, возникает исключение TypeError
.
Описание, комментарии, примеры
Метод keys возвращает имена только перечислимых свойств и методов. Для возвращения имен как перечислимых, так и неперечислимых свойств и методов можно использовать getOwnPropertyNames.
Дополнительные сведения о свойстве enumerable
см. defineProperty и getOwnPropertyDescriptor.
В следующем примере создается объект, имеющий три свойства и метод. Затем используется метод keys для получения свойств и методов объекта.
// Create a constructor function. function Pasta(grain, width, shape) { this.grain = grain; this.width = width; this.shape = shape; // Define a method. this.toString = function () { return (this.grain + ", " + this.width + ", " + this.shape); } } // Create an object. var spaghetti = new Pasta("wheat", 0.2, "circle"); // Put the enumerable properties and methods of the object in an array. var arr = Object.keys(spaghetti); alert (arr); // Output: // grain,width,shape,toString
В следующем примере отображаются имена всех перечислимых свойств объекта Pasta, начинающихся с буквы "g"."
// Create a constructor function. function Pasta(grain, width, shape) { this.grain = grain; this.width = width; this.shape = shape; } var polenta = new Pasta("corn", 1, "mush"); var keys = Object.keys(polenta).filter(CheckKey); alert(keys); // Check whether the first character of a string is "g". function CheckKey(value) { var firstChar = value.substr(0, 1); if (firstChar.toLowerCase() == "g") return true; else return false; } // Output: // grain
preventExtensions
Предотвращает добавление новых свойств к объекту.
Синтаксис
Object.preventExtensions(object)
Параметры
- object
- Обязательный. Объект, который требуется сделать нерасширяемым.
Возвращаемое значение
Объект, переданный функции.
Если аргумент object
не является объектом, вызывается исключение TypeError
.
Описание, комментарии, примеры
Функция preventExtensions делает объект нерасширяемым, чтобы к нему невозможно было добавить новые именованные свойства. После того как объект сделан нерасширяемым, его нельзя сделать расширяемым.
Дополнительные сведения о задании атрибутов свойств см. defineProperty.
Следующие связанные функции предотвращают изменение атрибутов объекта.
function | Объект становится нерасширяемым. | configurable получает значение false для каждого свойства | writable получает значение false для каждого свойства |
---|---|---|---|
preventExtensions | Да | Нет | Нет |
seal | Да | Да | Нет |
freeze | Да | Да | Да |
Следующие функции возвращают true
, если все условия, отмеченные в следующей таблице, имеют значение true
.
function | Расширяем ли объект? | configurable имеет значение false для всех свойств? | writable имеет значение false для всех свойств данных? |
---|---|---|---|
isExtensible | Да | Нет | Нет |
isSealed | Нет | Да | Да |
isFrozen | Нет | Да | Да |
В следующем примере показано использование функции preventExtensions.
var str=''; // Create an object that has two properties. var obj = { pasta: "spaghetti", length: 10 }; // Make the object non-extensible. Object.preventExtensions(obj); str += Object.isExtensible(obj) + '\n'; // Try to add a new property, and then verify that it is not added. obj.newProp = 50; str += obj.newProp + '\n'; alert (str); // Output: // false // undefined
seal
Предотвращает изменение атрибутов существующих свойств и исключает добавление новых свойств.
Синтаксис
Object.seal(object)
Параметры
- object
- Обязательный. Объект, атрибуты которого требуется заблокировать.
Возвращаемое значение
Объект, переданный функции.
Если аргумент object
не является объектом, вызывается исключение TypeError
.
Описание, комментарии, примеры
Функция seal выполняет оба из следующих действий:
- Делает объект нерасширяемым, чтобы к нему невозможно было добавить новые свойства.
- Устанавливает для атрибута configurable значение false для всех свойств объекта.
Если атрибут configurable
имеет значение false
, атрибуты свойства невозможно изменить, а свойство не может быть удалено. Когда configurable
имеет значение false
, а writable
имеет значение true
, атрибуты value
и writable
можно изменить.
Функция seal не изменяет атрибут writable
.
Дополнительные сведения о задании атрибутов свойств см. defineProperty. Чтобы получить атрибуты свойства, можно использовать функцию getOwnPropertyDescriptor.
Следующие связанные функции предотвращают изменение атрибутов объекта.
function | Объект становится нерасширяемым. | configurable получает значение false для каждого свойства | writable получает значение false для каждого свойства |
---|---|---|---|
preventExtensions | Да | Нет | Нет |
seal | Да | Да | Нет |
freeze | Да | Да | Да |
Следующие функции возвращают true
, если все условия, отмеченные в следующей таблице, имеют значение true
.
function | Расширяем ли объект? | configurable имеет значение false для всех свойств? | writable имеет значение false для всех свойств данных? |
---|---|---|---|
isExtensible | Да | Нет | Нет |
isSealed | Нет | Да | Да |
isFrozen | Нет | Да | Да |
В следующем примере показано использование функции seal.
var str=''; // Create an object that has two properties. var obj = { pasta: "spaghetti", length: 10 }; // Seal the object. Object.seal(obj); str += Object.isSealed(obj) + '\n'; // Try to add a new property, and then verify that it is not added. obj.newProp = 50; str += obj.newProp + '\n'; // Try to delete a property, and then verify that it is still present. delete obj.length; str += obj.length + '\n'; alert (str); // Output: // true // undefined // 10
hasOwnProperty
Определяет, имеет ли объект свойство с указанным именем.
Синтаксис
object.hasOwnProperty(proName)
Параметры
- object
- Обязательное. Экземпляр объекта.
- proName
- Обязательное. Строковое значение имени свойства.
Комментарии
Метод hasOwnProperty возвращает значение true
, если объект object
имеет свойство с указанным именем, и значение false
в противном случае. Данный метод не проверяет свойства в цепочке прототипов объекта; свойство должно быть членом самого объекта.
Это свойство не поддерживается для объектов узла для Internet Explorer 8 и ниже.
Пример
В следующем примере все объекты String
используют общий метод split
. Следующий код выводит значение false
и true
.
var str=''; var s = new String("Sample"); str += s.hasOwnProperty("split") + '\n'; str += String.prototype.hasOwnProperty("split") + '\n'; alert (str); // Output: // false // true
isPrototypeOf
Определяет, существует ли объект в цепочке прототипов другого объекта.
Синтаксис
prototype.isPrototypeOf(object)
Параметры
- prototype
- Обязательный. Прототип объекта.
- object
- Обязательный. Другой объект, цепочку прототипов которого требуется проверить.
Комментарии
Метод isPrototypeOf возвращает значение true
, если object
содержит prototype
в своей цепочке прототипов.
Цепочка прототипов служит для совместного использования функциональных возможностей несколькими экземплярами одного типа объектов. Метод isPrototypeOf возвращает значение false
, если object
не является объектом или если prototype
отсутствует в цепочке прототипов объекта object
.
Пример
В следующем примере показано использование метода isPrototypeOf.
function Rectangle() { } var rec = new Rectangle(); alert(Rectangle.prototype.isPrototypeOf(rec)); // Output: true
toLocaleString
Возвращает дату, преобразованную в строку с использованием текущего языкового стандарта.
Синтаксис
dateObj.toLocaleString()
Параметры
Обязательный аргументdateObj
представляет собой любой объект Date
.
Комментарии
Метод toLocaleString возвращает объект String
, который содержит дату, записанную в длинном формате, принятом по умолчанию в текущем языковом стандарте.
Для дат в диапазоне от 1601 до 1999 года нашей эры даты форматируются в соответствии с региональными стандартами, заданными в панели управления пользователя.
Для дат за пределами этого диапазона используется формат метода toString
по умолчанию.
Например, в Соединенных Штатах для 5 января метод toLocaleString возвращает значение "01/05/96 00:00:00". В Европе для этой же даты он возвращает значение "05/01/96 00:00:00", потому что в европейской традиции дата ставится перед месяцем.
Метод toLocaleString следует использовать только для отображения результатов для пользователя; его нельзя использовать в качестве основы для вычислений в скрипте, поскольку возвращаемый результат зависит от конкретного компьютера.
Пример
В следующем примере показано использование метода toLocaleString.
function toLocaleStrDemo(){ var d, s; //Declare variables. d = new Date(); //Create Date object. s = "Current setting is "; s += d.toLocaleString(); //Convert to current locale. return(s); //Return converted date } alert (toLocaleStrDemo());
toString
Возвращает строковое представление объекта.
Синтаксис
objectname.toString([radix])
Параметры
- objectname
- Обязательный. Объект, для которого ищется строковое представление.
- radix
- Необязательный. Указывает основание для преобразования числовых значений в строки. Это значение используется только для чисел.
Комментарии
ToString метод входит в состав всех встроенные JavaScript объектов. Его поведение зависит от типа объекта.Объект | Поведение |
---|---|
Массив | Элементы Array преобразуются в строки. Результирующие строки объединяются, разделенных запятыми. |
Boolean | Если логическое значение — true , возвращает «true ». В противном случае возвращает "false «. |
Дата | Возвращает текстовое представление даты. |
Ошибка | Возвращает строку, содержащую сообщение об ошибке.
Функция возвращает строку следующего вида, где function functionname( ) { [native code] } |
Число | Возвращает текстовое представление числа. |
Строка | Возвращает значение String объекта. |
По умолчанию возвращает "[object objectname]
", где objectname
имя типа объекта.
Пример
Следующий пример иллюстрирует использование toString метода с аргументом основание системы счисления. Возвращаемое значение функции, показано ниже является таблицей преобразования основание системы счисления.
function CreateRadixTable (){ var s = ""; // Create table heading. s += "Hex Dec Bin \n"; for (x = 0; x < 16; x++) { s += " "; // Convert to hexidecimal. s += x.toString(16); s += " "; if (x < 10) s += " "; // Convert to decimal. s += x.toString(10); s += " "; // Convert to binary. s += x.toString(2); s += "\n"; } return(s); } alert (CreateRadixTable () );
valueOf
Возвращает примитивное значение указанного объекта.
Синтаксис
object.valueOf( )
Параметры
Обязательная ссылкаobject
— это любой встроенный объект JavaScript.
Описание, комментарии, примеры
Метод valueOf определяется по-разному для каждого встроенного объекта JavaScript.
Объект | Возвращаемое значение |
---|---|
Array | Возвращает экземпляр массива. |
Boolean | Логическое значение. |
Date | Сохраненное значение времени, прошедшего после полуночи 1 января 1970 года (UTC) в миллисекундах. |
function | Сама функция. |
Number | Числовое значение. |
Объект | Сам объект. Задано по умолчанию. |
string | Строковое значение. |
У объектов Math и Error метод valueOf отсутствует.
values
Возвращает массив, элементами которого являются перечисляемые значения свойств, найденные в объекте.
Синтаксис
Object.values(object)
Параметры
- object
- Обязательный. Объект, для которого должны быть возвращены перечисляемые собственные значения свойств.
Возвращаемое значение
Массив, содержащий значения перечислимых свойства и методов объекта. Порядок свойств такой же, как и у объекта, заданного вручную, когда к свойствам применяется цикл for...in
Пример
let obj = { foo: "bar", baz: 42 }; let str = "Строка"; alert ( Object.values(obj) + '\n'+ Object.values(str) ); // Аргумент, не являющийся объектом, будет приведён к объекту
Свойства данных и свойства доступа
Этот раздел содержит практически всю необходимую информацию о свойствах данных и свойствах метода доступа.
Свойства данных
Свойство данных — это свойство, которое может получать и задавать значение. Свойства данных содержат свойства value
и writable
в дескрипторах.
В следующей таблице перечислены атрибуты для дескриптора свойства данных.
Атрибут дескриптора данных | Описание | default |
---|---|---|
Значение | Текущее значение свойства. | Undefined |
writable | true или false . Если writable имеет значение true , значение свойства можно изменить. | false |
enumerable | true или false . Если enumerable имеет значение true , то свойство может быть перечислено с помощью оператора for…in. | false |
configurable | true или false . Если атрибут configurable имеет значение true , атрибуты свойства можно изменить, а свойство может быть удалено. | false |
Если дескриптор не имеет атрибута value
, writable
, get
или set
, а заданное имя свойства не существует, то свойство данных добавляется.
Когда атрибут configurable
имеет значение false
, а writable
имеет значение true
, атрибуты value
и writable
можно изменить.
Свойства данных, добавленные без использования defineProperty
При добавлении свойства данных без использования функций defineProperty, defineProperties или create атрибуты writable
, enumerable
и configurable
все получают значение true
. После того как свойство добавлено, его можно изменить с помощью функции defineProperty.
Можно использовать следующие способы добавления свойства данных:
- Оператор присваивания (=). Например,
obj.color = "white";
- Литерал объекта. Например,
obj = { color: "white", height: 5 };
- Функция конструкции, как описано в разделе Использование конструкторов для определения типов
Свойства метода доступа
Свойство метода доступа вызывает предоставленную пользователем функцию при каждом задании или извлечении значения свойства. Дескриптор для свойства метода доступа содержит атрибут get
, атрибут set
или оба эти атрибута.
В следующей таблице перечислены атрибуты для дескриптора свойства метода доступа.
Атрибут дескриптора метода доступа | Описание | default |
---|---|---|
get | Функция, возвращающая значение свойства. Функция не имеет параметров. | Undefined |
set | Функция, задающая значение свойства. Она имеет один параметр, содержащий значение для присвоения. | Undefined |
enumerable | true или false . Если enumerable имеет значение true , то свойство может быть перечислено с помощью оператора for…in. | false |
configurable | true или false . Если атрибут configurable имеет значение true , атрибуты свойства можно изменить, а свойство может быть удалено. | false |
Если метод доступа get
не определен и сделана попытка доступа к значению свойства, возвращается значение undefined
. Если метод доступа set
не определен и сделана попытка назначить значение свойству метода доступа, ничего не происходит.
Изменения свойств
Если объект уже имеет свойство с указанным именем, атрибуты свойства изменяются. При изменении свойства атрибуты, которые не указаны в дескрипторе, остаются теми же.
Если атрибут configurable
существующего свойства имеет значение false
, то разрешено только изменение значения атрибута writable
с true
на false
.
Можно изменить свойство данных на свойство метода доступа, и наоборот. Если сделать это, атрибуты configurable
и enumerable
, не заданные в дескрипторе, сохранятся в свойстве. Другие атрибуты, которые не заданы в дескрипторе, получают значения по умолчанию.
Можно последовательно определить настраиваемые свойства метода доступа с помощью нескольких вызовов функции defineProperty. Например, один вызов defineProperty может определить только метод доступа get
. Последующий вызов для того же имени свойства может определить метод доступа set
. Свойство тогда будет иметь два метода доступа: get
и set
.
Чтобы получить объект дескриптора, который применяется к существующему свойству, можно использовать getOwnPropertyDescriptor
Можно использовать seal и freeze, чтобы предотвратить изменение атрибутов свойства.
Использование конструкторов для определения типов
Конструктор
— это функция, создающая экземпляр объекта Object
определенного типа. Конструктор вызывается с помощью ключевого слова new
. Ниже приведено несколько примеров конструкторов для встроенных объектов JavaScript и пользовательских объектов:
// Creates a generic object. var myObject = new Object(); // Creates a Date object. var myBirthday = new Date(1961, 5, 10); // Creates a user defined object. var myCar = new Car();
Конструктор функции содержит ключевое слово this
, которое представляет собой ссылку на только что созданный пустой объект. Он инициализирует новый объект путем создания свойств и присвоения им начальных значений. После завершения работы конструктор возвращает ссылку на созданный объект.
Написание конструкторов
Объекты можно создавать с помощью оператора new
совместно со стандартными функциями конструктора, такими как Object()
, Date()
и Function()
. Также можно создавать пользовательские функции конструкторов, которые определяют собственные наборы свойств и методов. Ниже приведен пример пользовательского конструктора.
function Circle (xPoint, yPoint, radius) { this.x = xPoint; // The x component of the center of the circle. this.y = yPoint; // The y component of the center of the circle. this.r = radius; // The radius of the circle. }
При вызове конструктора Circle
необходимо указать значения для центральной точки и радиуса круга. В результате создается объект Circle
, содержащий три свойства. Ниже показано, как создается экземпляр объекта Circle
.
var aCircle = new Circle(5, 11, 99);
Все объекты, созданные с помощью пользовательского конструктора, имеют тип object
. В JavaScript имеется только шесть типов: object
, function
, string
, number
, boolean
и undefined
. Дополнительные сведения см. в разделе Оператор typeof