В чем разница между объектом и прототипом в прототипном программировании?

Я пытаюсь понять "JavaScript-способ" создания и использования объектов, и я думаю, что я сталкиваюсь с непониманием объекта и прототипа.

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

var labrador = {
   color: 'golden',
   sheds: true,

   fetch: function()
   {
      // magic
   }
};

var jindo = Object.create(dog);
jindo.color = 'white';

или если я должен создать своего рода класс и создать экземпляры о том, что с помощью Object.create().

var Dog = { // Is this class-like thing a prototype?
   color: null,
   sheds: null,

   fetch: function()
   {
      // magic
   }
};

var labrador = Object.create(Dog);
labrador.color = 'golden';
labrador.sheds = true;

var jindo = Object.create(Dog);
jindo.color = 'white';
jindo.sheds = true;

имея гораздо больше опыта в классе на основе ООП последний метод чувствует себя более комфортно для меня (и, возможно, это достаточная причина). Но я чувствую, что дух прототипного наследования больше в первом варианте.

какой метод больше в "духе" прототипного программирования? Или я совсем не понимаю?

2 ответов


на prototype - это еще один объект, на который объект имеет неявную ссылку.

если вы:

var obj = Object.create( some_object );

...вы говорите, что хотите obj чтобы попытаться получить свойства из some_object, когда они не существуют на obj.

таким образом, ваш второй пример будет ближе к тому, как вы его используете. Каждый объект, созданный с помощью Object.create(Dog) в своем цепи прототипов, что


прототип-это просто объект.

Это любой объект, который другой объект использует в качестве прототипа.