Explain the purpose of the package.json file and node_modules directory. - package.json specifies which packages we want to use within the app as well as semantic versioning ranges to say what versions of that app are acceptable - package-lock.json specifies the exact version of the package that we have installed in our node_modules directory, where we got that package from, and dependencies of that package - node_modules is a directory that contains all of the actual code for packages that we have added to our project
npm init
is runnpm install
is runnpm -v
- npm install -g npm@latest
npm init
creates our package.json - npm install moment
adds the moment package as a dependency - const moment = require('moment');
imports the module into our code so that we can use the moment variable and call any methods on it that exist in the module;
moment.().format('dddd');
for example- We can also install a dependency as a dev dependency:
- `npm install --save-dev nodemon` adds the nodemon package as a dev dependency
git clone <repo-url>
- cd into repo - npm install
Define a constructor function using ES5 syntax. javascript function Book(title, series, author) { this.title = title; this.series = series; this.author = author; }
Define a method on the prototype of a constructor function. javascript Book.prototype.getInformation = function () { if (this.series) { return `${this.title} (${this.series})`; } else { return this.title; } }
Declare a class using ES6 syntax. javascript class Book { constructor(title, series, author) { this.title = title; this.series = series; this.author = author; } }
Define an instance method on a class (ES6). ```javascript class Book { // constructor
getInformation() { if (this.series) { return ${this.title} (${this.series})
; } else { return this.title; } } } ```
Define a static method on a class (ES6). ```javascript class Book { // constructor
static getUniqueAuthors(…books) { let authors = []; books.forEach(book => { if (!authors.includes(book.author)) { authors.push(book.author) } }) return authors; } } ```
Instantiate an instance of a class using the new keyword. javascript const theGrapesOfWrath = new Book('The Grapes of Wrath', null, 'John Steinbeck');
Implement inheritance using the ES6 extends syntax for an ES6 class. javascript class Book extends CatalogItem { // Book code }
Utilize the super keyword in a child class to inherit from a parent class. ```javascript class CatalogItem { constructor(title, series) { this.title = title; this.series = series; }
getInformation() { if (this.series) { return ${this.title} (${this.series})
; } else { return this.title; } } }
class Book extends CatalogItem {
constructor(title, series, author) {
super(title, series);
this.author = author;
}
}
class Movie extends CatalogItem {
constructor(title, series, director) {
super(title, series);
this.director = director;
}
// extending the functionality of the parent's getInformation()
getInformation() {
let result = super.getInformation();
if (this.director) {
result += ` [directed by ${this.director}]`;
}
return result;
}
}
```
class CatalogItem {
// CatalogItem code
}
module.exports = CatalogItem
```
```javascript
// book.js
const CatalogItem = require('./catalog-item');
class Book extends CatalogItem {
// Book code
}
module.exports = Book
```
- In this next example, we are exporting a multiple items from a file. We are assigning an object to module.exports that contains each item we are exporting. When we import from this file, we can either import the whole object, or destructure right in our import
```javascript
// classes.js
class CatalogItem {
// CatalogItem code
}
class Book extends CatalogItem {
// Book code
}
class Movie extends CatalogItem {
// Movie code
}
module.exports = { Book, Movie}
```
```javascript
// index.js
const classes = require('./classes');
const Movie = classes.Movie;
const Book = classes.Book;
// Or, destructuring in the import statment:
// const { Movie, Book } = require('./classes');
const theGrapesOfWrath = new Book('The Grapes of Wrath', null, 'John Steinbeck');
const aNewHope = new Movie('Episode 4: A New Hope', 'Star Wars', 'George Lucas');
```
Encapsulation
:
Inheritance
:Prototypal Inheritance
.
this
property references the object that the call originally came from.
Polymorphism
:as if it were an instance of one of its parent classes
.Open-Close
Principle (less applicable)Working with objects that come from code you didn’t create
Visualizations of our program (UI has to know about the structure of our data)
module.exports = ClassName
, module.exports = { ClassName }
, or exports.ClassName = ClassName
for exporting. Know the differences and how to use each.const ClassName = require('./file/path')
or const { ClassName } = require('./file/path')
for importing. Know the differences and how to use each.