Вы должны определить _title
в своем конструкторе:
class Modal {
constructor(selector, document) {
this.selector = selector;
this.document = document;
this._title = ''
}
}
var child = new ChildModal("#childTitle");
child.title = "JavaScript Standards"
child.defineChildTitle("Wow ");
child.assignChildTitle();
В настоящее время вы присоединяетесь к string
с undefined
, что приводит к undefined
.
Поскольку высоздаем два экземпляра, они не связаны друг с другом, поэтому child.title
- это не то же самое, что modal.title
, поэтому их объединение приведет к двум различным строкам.
Итак, вы не тольконужно установить заголовок в modal.title = 'JavaScript Standards'
, но вы также должны установить то же самое в child.title = 'JavaScript Standards'
.
class Modal {
constructor(selector, document) {
this.selector = selector;
this.document = document;
this.title = ' '
}
get title() {
return this._title;
}
set title(title) {
if(!title) {
throw new Error('Original title cannot be empty');
}
this._title = title;
}
defineNewTitle(newContent) {
this.title = newContent + this.title;
}
assignNewTitle() {
$(this.selector).text(this.title);
}
}
var modal = new Modal("#mainTitle");
modal.title = "Standards";
modal.defineNewTitle("JavaScript ");
modal.assignNewTitle();
class ChildModal extends Modal {
constructor(selector, title) {
super(selector, title);
}
defineChildTitle(title) {
this.title = title + this.title;
}
assignChildTitle() {
$(this.selector).text(this.title);
}
}
var child = new ChildModal("#childTitle");
child.title = "JavaScript Standards"
child.defineChildTitle("Wow ");
child.assignChildTitle();
<!DOCTYPE html>
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.0/jquery.min.js"></script>
<title>Class test</title>
<h1 id="mainTitle">
Main title
</h1>
<h2 id="childTitle">
Child title
</head>
<body>
<script src="Modal.js"></script>
</body>
</html>