Object.create() возвращает пустой объект [закрыто]

Вопрос или проблема

При компиляции этого TypeScript кода:

interface Jugador {
  id?: string;
  equipoId?: string[];
}

let jugador:Jugador = Object.create({
  id: '283428724', 
  equipoId: ['234827382']
});

console.log( jugador ); 
console.log( typeof jugador );

Я получаю следующий JavaScript код:

var jugador = Object.create({
    id: '283428724',
    equipoId: ['234827382']
});
console.log(jugador);
console.log(typeof jugador);

И выполнение возвращает следующее:

$ node test.js
{}
object

Почему созданный объект пустой? Результат, который я ожидаю, похож на

{ 
id: '283428724',
equipoId: ['234827382']
}

Когда вы используете Object.create(), свойства, которые вы определяете в объектном литерале, добавляются к прототипу нового объекта, а не напрямую к самому объекту. Это приводит к тому, что console.log(jugador) печатает пустой объект.

Чтобы получить ожидаемый результат, вы можете либо напечатать прототип для jugador

console.log(Object.getPrototypeOf(jugador));

Или присвоить их напрямую:

let jugador = {
  id: '283428724', 
  equipoId: ['234827382']
};

console.log(jugador); 

Ответ или решение

Когда вы используете метод Object.create(), создается новый объект с указанным объектом в качестве прототипа. Это важный момент, который объясняет, почему созданный вами объект jugador оказывается пустым.

В вашем примере вы делаете следующее:

let jugador = Object.create({
  id: '283428724', 
  equipoId: ['234827382']
});

Здесь вы создаете объект jugador, но свойства id и equipoId не добавляются непосредственно к этому объекту, а становятся свойствами его прототипа. Поэтому, когда вы выполняете console.log(jugador), вы видите {} — пустой объект, поскольку у него нет собственных свойств.

Чтобы увидеть свойства, которые вы указали, вам нужно либо получить прототип объекта jugador, как показано ниже:

console.log(Object.getPrototypeOf(jugador));

Этот код выведет объект с вашими свойствами id и equipoId.

Либо, если вам нужно, чтобы свойства находились непосредственно на создаваемом объекте, вам нужно будет задать их напрямую, вместо использования Object.create(). Например:

let jugador = {
  id: '283428724', 
  equipoId: ['234827382']
};

console.log(jugador);

В этом случае console.log(jugador) выведет:

{ 
  id: '283428724',
  equipoId: ['234827382']
}

В заключение, метод Object.create() создаёт объект с указанным прототипом, а прямое присвоение значений создаёт объект с собственными свойствами. Надеюсь, это объяснение помогло вам понять, почему результат не совпадал с вашими ожиданиями.

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

Капча загружается...