Прототип является свойством объекта, а функции являются объектами первого класса.
Чтобы сделать объект параметризуемым во время создания экземпляра, мы можем создать объект с помощью функции конструктора, которая являетсяwrote:
function Animal (name) {
this.name = name;
}
Animal.prototype.speak = function() {
console.log(this.name + " says hi!");
}
var lion = new Animal("lion");
lion.speak(); // "lion says hi!"
Здесь дается имя при построении объекта.
Но вы можете создавать объекты также с помощью инициализаторов объектов, например
let lion = {
name: "lion",
speak: function() {
console.log(this.name + " says hi!");
}
}
lion.speak(); // "lion says hi!"
Естественно, этоэто проще с конструктором, особенно если у вас есть несколько свойств для инициализации и / или несколько похожих объектов для создания.
Третий способ создания объектов - это использование Object.create ().Он позволяет вам указывать объект-прототип при создании объекта, например:
var cat = Object.create(lion);
cat.name = "house cat";
cat.speak(); // "house cat says hi!"
console.log(lion.isPrototypeOf(cat)); // true
Для получения информации об объектах в JavaScript см. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Working_with_Objects
Редактировать: но по умолчанию все функции имеют "Прототип "члена объекта, так как мы не знаем, должна ли функция использоваться в качестве конструктора.Объектные литералы или объекты, созданные с помощью Object.create (), не будут иметь его.
console.log(cat.prototype); //undefined
Что касается добавления объекта-члена-прототипа в литерал объекта, вопрос переполнения стека: Добавление прототипа клитерал объекта