Начнем с того, что ООП основаноJavaScript на прототипах, а не на классах. Чтобы увидеть больше информации о prototype-based OOPvs. class-based OOPВы можете перейти по следующей ссылке (на английском языке).
Прототипы — это набор стандартов для интеграции объектно-ориентированного программирования в JavaScript. Итак, следуя этим правилам, мы сможем создать различные методологии объектной ориентации:
Наследование
инкапсуляция
Абстракция
Полиморфизм
Конечно, не все методики доступны.
Как я могу использовать прототипы?
ECMAScript 5
Чтобы создать класс:
function Polygon(height, width){
this.height = height;
this.width = width;
}
По сути, преимущество наличия прототипов JavaScriptзаключается в возможности использования объектно-ориентированного программирования в качестве методологии программного обеспечения.
Все объекты в JavaScript имеют специальное свойство, называемое prototype, которое является ссылкой на другой объект.
Чем это полезно?Давайте посмотрим на примере:
var miObjeto = {
foo: 5
}
console.log(miObjeto.foo); // 5
Здесь мы создаем объект с именем miObjeto, определяем свойство fooсо значением 5 и печатаем значение этой переменной. Ясно, что результат равен 5, но что происходит, когда у объекта нет переменной foo? JavaScript попытается найти его в prototypeимени этого объекта и так далее, пока не найдет его или не дойдет до конца цепочки прототипов.
Эта цепочка прототипов позволяет нам имитировать наследование (помните, что в JavaScript нет наследования на основе классов), если мы хотим добавить методы или свойства к объекту, мы можем сделать это через файл prototype.
Теперь мы собираемся создать объект pтипа Personaс new, на данный момент прототип pравный Persona.prototype:
var p = new Persona("John", 33);
console.log(p.nombre); // propiedad del objeto
console.log(p.toString()); // propiedad no encontrada directamente en el objeto
По этой причине при вызове метода, toStringдаже если это не прямой метод p, JavaScript смотрит на прототип pи находит его, и все работает правильно.
В любой момент мы можем запросить прототип объекта с помощью Object.getPrototypeOf, для нашего конкретного случая:
Наконец, важно отметить, что существует нестандартное свойство для получения прототипа объекта с именем __proto__, однако его использования следует избегать.
Прототипы — это объекты, которые могут иметь свойства (функции и методы), они также могут использоваться другими объектами для наследования их свойств, это очень полезно для инкапсуляции и повторного использования кода, это дает вам возможность адаптировать свои коды для пользователя. ориентированный дизайн объектов.
В JavaScript все, что не является примитивными типами ( undefined, null, или ) boolean, является объектами и может использоваться в качестве прототипов для создания других объектов.numberstring
Начнем с того, что ООП основано
JavaScript
на прототипах, а не на классах. Чтобы увидеть больше информации оprototype-based OOP
vs.class-based OOP
Вы можете перейти по следующей ссылке (на английском языке).Прототипы — это набор стандартов для интеграции объектно-ориентированного программирования в
JavaScript
. Итак, следуя этим правилам, мы сможем создать различные методологии объектной ориентации:Конечно, не все методики доступны.
Как я могу использовать прототипы?
ECMAScript 5
Чтобы создать класс:
Для наследования от базового класса:
ECMAScript 6
Чтобы создать класс:
Для наследования от базового класса:
При этом мы можем создать экземпляр с:
Примеры взяты из Inheritance и цепочки прототипов .
Преимущества
JavaScript
заключается в возможности использования объектно-ориентированного программирования в качестве методологии программного обеспечения.Все объекты в JavaScript имеют специальное свойство, называемое
prototype
, которое является ссылкой на другой объект.Чем это полезно?Давайте посмотрим на примере:
Здесь мы создаем объект с именем
miObjeto
, определяем свойствоfoo
со значением 5 и печатаем значение этой переменной. Ясно, что результат равен 5, но что происходит, когда у объекта нет переменнойfoo
? JavaScript попытается найти его вprototype
имени этого объекта и так далее, пока не найдет его или не дойдет до конца цепочки прототипов.Эта цепочка прототипов позволяет нам имитировать наследование (помните, что в JavaScript нет наследования на основе классов), если мы хотим добавить методы или свойства к объекту, мы можем сделать это через файл
prototype
.Рассмотрим следующую функцию
Persona
:Прототип этой функции таков,
Persona.prototype
и мы можем добавить к нему больше методов или свойств, чем было изначально:Теперь мы собираемся создать объект
p
типаPersona
сnew
, на данный момент прототипp
равныйPersona.prototype
:По этой причине при вызове метода,
toString
даже если это не прямой методp
, JavaScript смотрит на прототипp
и находит его, и все работает правильно.В любой момент мы можем запросить прототип объекта с помощью
Object.getPrototypeOf
, для нашего конкретного случая:Наконец, важно отметить, что существует нестандартное свойство для получения прототипа объекта с именем
__proto__
, однако его использования следует избегать.Прототипы — это объекты, которые могут иметь свойства (функции и методы), они также могут использоваться другими объектами для наследования их свойств, это очень полезно для инкапсуляции и повторного использования кода, это дает вам возможность адаптировать свои коды для пользователя. ориентированный дизайн объектов.
В JavaScript все, что не является примитивными типами (
undefined
,null
, или )boolean
, является объектами и может использоваться в качестве прототипов для создания других объектов.number
string