Приветствую!
Изучил ООП в прототипном стиле, но для гарантии правильности полученных знаний, хотел поинтересоваться, все ли я верно понял.
Ниже набросал конструктор с методами и свойствами, постарался изобразить большинство базовых операций внутри конструктора.
Дополнительный вопрос: в функциональном стиле можно ограничить доступ к приватным свойствам/методам. Изучая прототипный стиль, замечаю, что пишут приватные свойства/методы через первое подчеркивание, например:
_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'