Объекты

JavaScriptКомментариев нет

В данном разделе будут перечислены встроенные свойства объектов.

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


Будь первым кто прокомментирует статью.

Добавить комментарий

Войти с помощью: