Mike_Ro
@Mike_Ro
Python, JS, WordPress, SEO, Bots, Adversting

Правильно ли я понял ООП в прототипном стиле?

Приветствую!

Изучил ООП в прототипном стиле, но для гарантии правильности полученных знаний, хотел поинтересоваться, все ли я верно понял.

Ниже набросал конструктор с методами и свойствами, постарался изобразить большинство базовых операций внутри конструктора.

Дополнительный вопрос: в функциональном стиле можно ограничить доступ к приватным свойствам/методам. Изучая прототипный стиль, замечаю, что пишут приватные свойства/методы через первое подчеркивание, например: _namePropertyPrivate или _nameMethodPrivate - это такого рода реализация приватных свойств/методов?

// конструктор 1
function Construct() {
	this._privateProperty = 'Я приватное свойство Construct';
	this.publicProperty = 'Я публичное свойство Construct';
}

// приватные методы
Construct.prototype._privateMethod1 = function() {
	return `Я приватный метод -> ${this.publicProperty}`;
}

Construct.prototype._privateMethod2 = function() {
	return `Я приватный метод -> ${this._privateProperty}`;
}

// публичные методы
Construct.prototype.publicMethod1 = function() {
	return 'Я публичный метод Construct';
}

Construct.prototype.publicMethod2 = function() {
	return this._privateMethod1();
}

Construct.prototype.publicMethod3 = function() {
	return this._privateMethod2();
}

let construct = new Construct();

// обращаемся к приватному свойству
console.log(construct._privateProperty); // 'Я приватное свойство Construct'

// обращаемся к публичному свойству
console.log(construct.publicProperty); // 'Я публичное свойство Construct'

// обращаемся к приватному методу
console.log(construct._privateMethod1()); // 'Я приватный метод Construct'

// обращаемся к публичному методу
console.log(construct.publicMethod1()); // 'Я публичный метод Construct'

// обращаемся к публичному методу -> к публичному свойству
console.log(construct.publicMethod2()); // 'Я приватный метод -> Я публичное свойство Construct'

// обращаемся к публичному методу -> к приватному свойству
console.log(construct.publicMethod3()); // 'Я приватный метод -> Я приватное свойство Construct'

// конструктор 2
function Construct2() {}

// наследование
Construct2.prototype = Object.create(Construct.prototype);
Construct2.prototype.constructor = Construct2;

// объявляем новый конструктор
let construct2 = new Construct2();

Construct2.prototype.publicMethod4 = function() {
	return `${construct.publicProperty} вызванное из Construct2`;
}

// унаследовали
console.log(construct2.publicMethod4()); // 'Я публичное свойство Construct вызванное из Construct2'
  • Вопрос задан
  • 248 просмотров
Решения вопроса 1
SnyMaster
@SnyMaster
Будет работа пишите...
Это функциональный стиль.
Посмотрите про прототипный стиль тут https://learn.javascript.ru/prototypes
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы