В данном разделе будут перечислены встроенные свойства объектов.
valueOf и toString
Начнем с самых простых это valueOf и toString.
Для начала стоит сказать что в логическом смысле объекты все имеют значение true. При преобразовании объекта в строку или число не все так просто. У объектов есть для этого 2 метода: valueOf — при преобразовании объекта к числу и toString — для преобразовании к строке. У встроенных объектах зачастую метод valueOf отсутствует. Если метод valueOf отсутствует, срабатывает метод toString.
В объектах созданных пользователем, если не указать один из методов по умолчанию будет возвращаться строка: «[object Object]».
Пример добавления свойств:
// пример var room = { number: 777, valueOf: function() { return this.number; }, toString: function() { return this.number; } }; alert( +room ); // 777, вызвался valueOf delete room.valueOf; // valueOf удалён alert( +room ); // 777, вызвался toString
Object.defineProperty(obj, prop, descriptor)
Object.defineProperty — основной метод для управления свойствами объекта, который позволяет довольно тонко их настроить.
Аргументы:
obj — объект, в котором объявляется свойство.
prop — имя свойства, которое нужно объявить или модифицировать.
descriptor — дескриптор, объект который описывает поведение свойства.
В нём могут быть следующие поля:
- value – значение свойства, по умолчанию undefined
- writable – значение свойства можно менять, если true. По умолчанию false.
- configurable – если true, то свойство можно удалять, а также менять его в дальнейшем при помощи новых вызовов defineProperty. По умолчанию false.
- enumerable – если true, то свойство просматривается в цикле for..in и методе Object.keys(). По умолчанию false.
- get – функция, которая возвращает значение свойства. По умолчанию undefined.
- set – функция, которая записывает значение свойства. По умолчанию undefined.
Пример добавления свойства:
// пример добавления свойства var user = {}; Object.defineProperty(user, "name", { value: "Вася", configurable: true, writable: true, enumerable: true })
Пример добавление функции:
// пример var user = { firstName: "Вася", surname: "Петров" } Object.defineProperty(user, "fullName", { get: function() { return this.firstName + ' ' + this.surname; } }); alert(user.fullName); // Вася Петров
Object.defineProperties(obj, descriptors) — задаем несколько свойств, пример:
// несколько свойств var user = {} Object.defineProperties(user, { firstName: { value: "Петя" }, surname: { value: "Иванов" }, fullName: { get: function() { return this.firstName + ' ' + this.surname; } } }); alert( user.fullName ); // Петя Иванов
Статические методы в объектах
Статические функции и переменные можно использовать для всех экземпляром объектов созданные с помощью конструктора, более наглядно это демонстрирует пример:
// пример создания статической переменной и функции function Article() { Article.count++; //... } Article.count = 0; Article.showCount = function() { alert( this.count ); // (1) } // использование new Article(); new Article(); Article.showCount(); // (2)
Узнаем тип объекта(Array, Date, Object)
// вернем точный тип объекта alert( {}.toString.call(123) ); // [object Number] alert( {}.toString.call("строка") ); // [object String]
своя функция проверки типа:
// своя функция проверки типа function getClass(obj) { return {}.toString.call(obj).slice(8, -1); } alert( getClass(new Date) ); // Date alert( getClass([1, 2, 3]) ); // Array
Источник: https://learn.javascript.ru/descriptors-getters-setters
Будь первым кто прокомментирует статью.