• Объекты

    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


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

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

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