@ChrisMenschenin
Возвысь низкое и унизь высокое.

Как работает свойство prototype?

Здравствуйте.
Не могу понять механизм работы prototype. Если ему присвоить объект, то он станет прототипом дочернему объекту. А если ничего не присваивать, там по умолчанию присвоен объект, но в этом случае дочерний объект вроде как не получает __proto__, а только constructor. Мне бы хватило кода той части с prototype. Если не совсем понятно объяснил - извините, сам запутан и не могу найти ответа.
Спасибо
  • Вопрос задан
  • 237 просмотров
Решения вопроса 2
@Bhudh
Если свойству Какой_то_конструктор.prototype присвоить объект, он станет прототипом объекта, созданного функцией Какой_то_конструктор, вызванной с оператором new. Для функции он получается не "дочерним", а скорее "сестринским" (папа-прототип у них один).
А __proto__ — это просто короткая ссылка (а точнее, геттер/сеттер) на свойство constructor.prototype у новосозданного объекта.
Ответ написан
Комментировать
evgeniy8705
@evgeniy8705
Повелитель вселенной
const Super = function(superProp) {
	this.superProp = superProp;
};

// Присваивать prototype объект не нужно. 
// Нужно только добавлять данные, 
// иначе прототип будет перезаписан на обычный объект, 
// у которого нет свойств которые содержит prototype по умолчанию
Super.prototype.superMethod = function() { 
	console.log("I am Super Class");
};

// Так делать не нужно - Super.prototype = {
		// some code
// };

// Super.prototype = { После добавления свойств в prototype, он будет выглядеть примрно так
//   constructor: Super, // свойства по умолчанию
//   __proto__: Object.prototype, // default
//   superMethod: function() {
//   	// some code
//   }
// };

const SubClass = function(subProp) {
	Super.apply(this, arguments); // Вызов конструктора супер класса

	this.subProp = subProp;
  
  // __proto__ = Super.prototype;
}

SubClass.prototype = Object.create(Super.prototype); // Создаем объект прототипа на основе прототипа супер класса
SubClass.prototype.constructor = SubClass; // Перезаписываем свойство constructor

SubClass.prototype.subMethod = function() {
	console.log("I am subClass");
};
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы