В чем разница между объектом и прототипом в прототипном программировании?
Я пытаюсь понять "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)
в своем цепи прототипов, что
прототип-это просто объект.
Это любой объект, который другой объект использует в качестве прототипа.