Путаница с Object.create () - как получить доступ / уничтожить объект? - PullRequest
0 голосов
/ 19 марта 2020

Если у меня есть следующий код:

const person = {
  name: "Tom",
  isHuman: true,
  kill() {
    // do stuff
  }
};

Object.create(person);

Как мне получить доступ к объекту или удалить / уничтожить его? Я понимаю, что могу сделать что-то вроде:

const me = Object.create(person);
me.name = "Bob";

.. но это не то, что я ищу. Я не хочу назначать его.

Аналогично, как бы я получил доступ к методу kill() без его предварительного назначения (например, me.kill();?

Ответы [ 2 ]

1 голос
/ 20 марта 2020

вы можете легко удалить созданный объект без var let или const:

const person = {
  name: "Tom",
  isHuman: true,
};
me = Object.create(person);
delete me
// `me` is removed, and become not defined
// console.log(me) throws an error.

Javascript использовать сборщик мусора, вы можете использовать его для удаления объектов. Объект или данные, на которые нет ссылок, будут удалены:

const person = {
  name: "Tom",
  isHuman: true,
};
let me = Object.create(person);
me = null
// { name: "Tom", ... } become unreachable, garbage remove it from the memory.

Когда вы используете const, вы не можете присвоить новое значение , вы не можете удалить это значение / объект / данные. Но вы можете очистить это примерно так:

const person = {
  name: "Tom",
  isHuman: true,
  kill() {
    delete this.name
    delete this.isHuman
  }
};
const me = Object.create(person);
console.log(person.name) // "Tom"
// delete me // delete nothing
// me = null // throws an error, because you can't assign new value to a const

person.kill()
console.log(person.name) // undefined
console.log(person.isHuman) // undefined
0 голосов
/ 19 марта 2020

Когда вы:

const person = {}

вы создаете объект (а не класс) человека. Таким образом, чтобы получить доступ к методу kill, вам нужно только

person.kill();

Но я думаю, что вы хотите создать класс, в этом случае вы можете:

class Person {
    name = "Tom";
    isHuman = true;

    kill(){
    }
}

const me = new Person();
me.name = "Bob";
me.kill();

Или без использования класса вы можете

const createPerson = () => ({
    name: "Tom",
    isHuman: true,
    kill: () => {
       //do stuff here
    }
});

const me = createPerson();
me.name = "Bob";
me.kill();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...