Page 186 - Браун Э. - Изучаем JavaScript. Руководство по созданию современных веб-сайтов - 2017
P. 186
поскольку нет ничего, что предотвратило бы добавление свойств непосредствен
но в прототип, всегда лучше использовать hasOwnProperty, чтобы удостовериться
в этом. Рассмотрим пример.
cla ss Super {
constructor ( ) {
this . narne = ' S uper ' ;
this . i sSuper = true ;
1 1 это допустимо, но не желательно . . .
Super . prototype . s neaky = ' Н е рекомендуется ! ' ;
class Sub extends Super
constructor ) {
(
super ( ) ;
this . narne ' S u ' ;
b
this . i s Sub = t r u e ;
const obj = new Su ( ) ;
b
for l et р in obj ) {
(
console . l o ( ' $ { p ) : $ { o bj [ р ] } ' +
g
( o bj . hasOwnProperty ( p ) ? ' (унаследован ) ' ) ) ;
о
Если вы запустите эту программу, то увидите
narne : Sub
i s Super : true
i s Sub : true
sneaky : Не рекомендуется ! ( у наследовано)
Свойства name, i s Super и i s Sub определяются в экземпляре, а не в цепи прото
типов (обратите внимание, что свойства, объявленные в конструкторе супер класса,
присутствуют также в экземпляре производного класса). Свойство sneaky, напро
тив, было вручную добавлено в прототип суперкласса.
Вы можете избежать этой проблемы в целом, используя метод Object . keys, кото
рый включает только свойства, определенные в прототипе.
Строковое предста в ление
j
Каждый объект в конечном счете происходит от класса Ob e ct. Таким образом,
все методы, доступные в классе Obj ect, стандартно доступны для всех объектов.
Одним из этих методов является toString, возвращающий стандартное строковое
Объектно·ориентирова н ое программирование 1 8 7
н

