Что считается простым объектом? - PullRequest
0 голосов
/ 24 августа 2018

В JS, но в частности для приведения, что считается простым объектом?

Например, следующее также считается простым объектом?

let a = {
  b: {
    c: 'd'
  }
};

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

let payload = {
  all: ['john', 'jane'],
  byId: {
    john: {
      name: 'john',
      age: 23
    },
    jane: {
      name: 'jane',
      age: 40
    }
  }
}

Я хочу совершить действие:

function userLoad(payload) {
  return { type: USER_LOAD, payload }
}

Но если полезная нагрузка не является простым объектом, это не считается хорошей практикой. Как обращаться с такими случаями.

Ответы [ 2 ]

0 голосов
/ 24 августа 2018

Простой объект или POJO (простой объект javascript) - это объект, созданный следующими способами:

let foo = {prop1: 1}  // object literal
let bar = new Object(); // new object syntax

Разница с POJO и объектом, созданным с помощью функции конструктора, заключается в следующем:

function Person (name) {
  this.name = name;
}

let me  = new Person('willem')  // this object is not a POJO


console.log(Object.getPrototypeOf(me) === Person.prototype); // prototype is Person


let POJO = {};

console.log(Object.getPrototypeOf(POJO) === Object.prototype); // POJO prototype is always Object not the prototype property of the constructor functoin. This is the difference
0 голосов
/ 24 августа 2018

Хорошо, поэтому он считается простым объектом, см. Фрагмент ниже.

function isPlainObject(obj) {
  if (typeof obj !== 'object' || obj === null) return false

  let proto = obj
  while (Object.getPrototypeOf(proto) !== null) {
    proto = Object.getPrototypeOf(proto)
  }

  return Object.getPrototypeOf(obj) === proto
}

let obj = {
  a: {
    b: 'sss',
    c: ['ss', 'sss']
  }
}

console.log(isPlainObject(obj));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...