function Book({name, author, year}) {
const constructor = {
getTitle: function() {
return this.name + ' by ' + this.author + ' (' + this.year + ')';
}
};
const book = Object.create(constructor);
book.name = name;
book.author = author;
book.year = year;
return book;
}
// test
const lastBook = Book({
name: "Foundation and Earth",
author: "Isaac Asimov",
year: 1986
});
console.log(lastBook); // {name: 'Foundation and Earth', author: 'Isaac Asimov', year: 1986}
console.log(lastBook.getTitle()); // Foundation and Earth by Isaac Asimov (1986)
PROTOTYPE CHAINING, function object combination
function Book({name, author, year}) {
this.name = name;
this.author = author;
this.year = year;
}
Book.prototype.getTitle = function() {
return this.name + ' by ' + this.author + ' (' + this.year + ')';
};
// test
const lastBook = new Book({
name: "Foundation and Earth",
author: "Isaac Asimov",
year: 1986
})
console.log(lastBook); // Book {name: 'Foundation and Earth', author: 'Isaac Asimov', year: 1986}
console.log(lastBook.getTitle()); // Foundation and Earth by Isaac Asimov (1986)
class Book {
constructor({name, author, year}) {
this.name = name;
this.author = author;
this.year = year;
}
getTitle() {
return this.name + ' by ' + this.author + ' (' + this.year + ')';
}
}
// test
const lastBook = new Book({
name: "Foundation and Earth",
author: "Isaac Asimov",
year: 1986
})
console.log(lastBook); // Book {name: 'Foundation and Earth', author: 'Isaac Asimov', year: 1986}
console.log(lastBook.getTitle()); // Foundation and Earth by Isaac Asimov (1986)
class BookInterface {
constructor(author) {
this.author = author;
}
getAuthor() {
return this.author;
}
}
class Book extends BookInterface {
constructor({name, author, year}) {
super(author);
this.name = name;
this.year = year;
}
getTitle() {
return this.name + ' by ' + this.author + ' (' + this.year + ')';
}
}
// test
const lastBook = new Book({
name: "Foundation and Earth",
author: "Isaac Asimov",
year: 1986
})
console.log(lastBook); // Book {name: 'Foundation and Earth', author: 'Isaac Asimov', year: 1986}
console.log(lastBook.getTitle()); // Foundation and Earth by Isaac Asimov (1986)
Object.setPrototypeOf
function BookInterface(author) {
const constructor = {
getAuthor: function() {
return this.author;
}
};
const book = Object.create(constructor);
book.author = author;
return book;
}
function Book({name, author, year}) {
const book = BookInterface(author);
const constructor = {
getTitle: function() {
return this.name + ' by ' + this.author + ' (' + this.year + ')';
}
};
Object.setPrototypeOf(book, constructor);
book.name = name;
book.year = year;
return book;
}
// test
const lastBook = new Book({
name: "Foundation and Earth",
author: "Isaac Asimov",
year: 1986
});
console.log(lastBook); // {name: 'Foundation and Earth', author: 'Isaac Asimov', year: 1986}
console.log(lastBook.getTitle()); // Foundation and Earth by Isaac Asimov (1986)
class Book {
#genre;
constructor({ name, author, year, genre }) {
this.name = name;
this.author = author;
this.year = year;
this.#genre = genre;
}
static getInfo() {
return 'Class: Book';
}
getTitle() {
return this.name + ' by ' + this.author + ' (' + this.year + ')';
}
get() {
return this.#getBook();
}
getGanre() {
return this.#genre;
}
#getBook() {
return {
...this,
};
}
}
// test
const lastBook = new Book({
name: 'Foundation and Earth',
author: 'Isaac Asimov',
year: 1986,
genre: 'sci-fi',
});
console.log(Book.getInfo());
console.log(lastBook);
console.log(lastBook.getTitle());
console.log(lastBook.get());
console.log(lastBook.getGanre());
class Singleton{
constructor() {
if (Singleton._instance) {
Singleton._instance = this;
}
return Singleton._instance;
}
static getInstance() {
return this._instance;
}
}