JavaScript-новый объект может иметь ссылку на прототип другого объекта

#javascript #prototype

#javascript #прототип

Вопрос:

У меня есть 3 вопроса о следующем коде, который я нашел в учебнике по JavaScript под названием «JavaScript: хорошие части».

Здесь говорится, что когда мы создаем новый объект, мы можем выбрать объект, который должен быть его прототипом.

Часть 1: допустим, у нас есть следующий объект

 var person = {
    first_name: "Tim",
    last_name: "Thompson",
    middel_name: "Jack",
    nick_name: "GoldTeeth",
    age:30
  };
  

Часть 2. затем мы собираемся добавить функцию Create к объекту, используя следующий код

 Object.create = function(o){
    var F = function(){};
        F.prototype = o;
        return new F(); 
}
  

и затем позже мы можем сопоставить прототип любого нового объекта с «person», используя Object.create() функцию

часть 3: пример//

   var another_person = Object.create(person);
  alert(another_person.first_name); //Tim
  
  1. почему в теле функции create почему мы присваиваем F функции
  2. и в конце возвращает новый F()
  3. почему в части 3 мы назначаем another_person функции

Я понимаю, что в JavaScript функции являются object, но я не могу следовать логике. Кто-нибудь может мне помочь?

Комментарии:

1. «мы присваиваем F функции » Нет, мы присваиваем функцию F . «мы присваиваем another_person функции » Нет, мы присваиваем результат Object.create another_person , который является объектом. new F создает объект. Я думаю, вам следует ознакомиться с new ключевым словом и с тем, как оно работает вместе с prototype свойством функции: developer.mozilla.org/en-US/docs/Web/JavaScript /… , developer.mozilla.org/en-US/docs/Web/JavaScript/Guide /…

Ответ №1:

Когда у вас есть код, подобный этому:

 var foo = bar;
  

тогда вызванная ваша переменная foo получит значение bar . Таким образом, он bar назначен foo , не foo назначен bar , поэтому у вас есть некоторые неправильные представления в вашем вопросе.

Что касается опубликованного кода. Первая часть создает объект и присваивает его person . Вторая часть присваивает функцию Object.create . Функция создает новую пустую функцию и присваивает ее F . Когда это сделано, вызываемый параметр o присваивается F ‘s prototype . Поскольку F имеет prototype , его можно создать, и будет возвращен новый экземпляр F . Третья часть — это тестовый код. Он принимает, person и с помощью Object.create создает экземпляр нового person .