Передача прототипа в Object.Create () - PullRequest
0 голосов
/ 15 апреля 2020

РЕДАКТИРОВАТЬ: ребенок является объектом. Извините, я довольно новичок в этом

Я запутался в том, как работает Object.create (). Я понимаю, что все, что вы передаете, возвращает новый объект с этим аргументом в качестве прототипа. Мой учитель перечислил это как пример классического наследования:

child.prototype=Object.create(parent.prototype)

что это делает sh (с точки зрения наследования), чего не имеет следующий пример:

child = Object.create(parent)

Ответы [ 2 ]

1 голос
/ 15 апреля 2020

давайте сначала объясним вторую часть вашего вопроса

на основе вашего ответа child - это объект, а не функция

child = Object.create(parent)

что это будет делать?

1 - это создаст объект с именем child сильный текст 2 - он будет использовать объект parent в качестве прототипа __proto__ из объект child, так что если parent имеет свойство с именем lastName : Thomson, то child теперь имеет доступ к этому свойству через его свойство __proto__, то же самое относится к любому методу / функции в объекте parent, child объект теперь имеет к нему доступ.

теперь к первой части:

child.prototype = Object.create(parent.prototype)

что это будет делать?

1 - это предполагает, что где-то в скрипте есть уже созданный объект с именем child

2 - он назначает свойство с именем prototype объекту child, так что теперь вы можете написать что-то вроде этого child.prototype и получите некоторый результат

3 - Object.create(parent.prototype) запускает преобразование / создание только что созданного вами свойства child.prototype объекта и т. Если сделать __proto__ этого объекта равным parent.prototype, который должен быть объектом, я имею в виду, что parent.prototype должен быть объектом, чтобы это работало.


ПРИМЕЧАНИЕ:

экземпляры объектов (обычные объекты, такие как let obj = {};) не имеют свойства .prototype, но они автоматически наследуют нечто под названием __porto__ от своего конструктора, который, к сожалению, также называется прототипом

* С другой стороны, конструкторы / функции 1060 * имеют свойство .prototype, которым вы можете манипулировать, как и любым другим свойством, это свойство .prototype передается позже экземплярам этого конструктора / функции

, это довольно интересный топи c Я призываю вас углубиться в это, если вы хотите узнать больше о javascript.

0 голосов
/ 15 апреля 2020

В test1 мы видим, что Constructor1.prototype не наследуется от Constructor2.prototype с использованием Object.create. В test2 вы можете видеть, что произошло наследование prototype, поскольку Object, созданный путем вызова new, имеет свойства, полученные из Constructor1. test3 показывает, что prototype подобное назначение вообще не работает.

function Constructor1(test = 'see'){
  this.test = test; this.yeah = 7; 
  this.fun = function(q){
    this.test = q;
    return this;
  }
}
function Constructor2(q = true){
  this.noInheritedProps = q;
}
Constructor2.prototype = Object.create(Constructor1.prototype);
const test1 = new Constructor2, obj1 = new Constructor1('with argument'), test2 = Object.create(obj1);
console.log(test1); console.log(test2); Constructor2.prototype = Constructor1.prototype;
const test3 = new Constructor2('once again true');
console.log(test3);
...