JavaScript is partly an object-oriented language.
To learn JavaScript, we got to learn the object-oriented parts of JavaScript.
In this article, we’ll look at objects and constructors.
Accessing an Object’s Properties
We can access an object’s properties by using the square bracket notation or the dot notation.
To use the square bracket notation, we can write:
dog['name']
This works for all property names, whether they’re valid identifiers or not.
We can also use them to access properties by passing in a property name dynamically with a string or symbol.
The dot notation can be used by writing:
dog.name
This is shorter but only works with valid identifiers.
An object can contain another object.
For instance, we can write:
const book = {
name: 'javascript basics',
published: 2020,
author: {
firstName: 'jane',
lastName: 'smith'
}
};
The author property has the firstName and lastName properties.
We can get nested properties by writing:
book['author']['firstName']
or
book.author.firstName
We can mix the square brackets and dot notation.
So we can write:
book['author'].firstName
Calling an Object’s Methods
We can call a method the same way we call any other function.
For instance, if we have the following object:
const dog = {
name: 'james',
gender: 'male',
speak() {
console.log('woof');
}
};
Then we can call the speak method by writing:
dog.speak()
Altering Properties/Methods
We can change properties by assigning a value.
For instance, we can write:
dog.name = 'jane';
dog.gender = 'female';
dog.speak = function() {
console.log('she barked');
}
We can delete a property from an object with the delete operator:
delete dog.name
Then when we try to get dog.name , we get undefined .
Using this Value
An object has its own this value.
We can use it in our object’s methods.
For instance, we can write:
const dog = {
name: 'james',
sayName() {
return this.name;
}
};
We return this.name , which should be 'james' .
Because this is the dog object within the sayName method.
Constructor Functions
We can create constructor functions to let us create objects with a fixed structure.
For instance, we can write:
function Person(name, occupation) {
this.name = name;
this.occupation = occupation;
this.whoAreYou = function() {
return `${this.name} ${this.occupation}`
};
}
We have the instance properties name , occupation and the this.whoAreYou instance method.
They’re all returned when we create a new object with the constructor.
Then we can use the new operator to create a new Person instance:
const jane = new Person('jane', 'writer');
The value of this os set to the returned Person instance.
We should capitalize the first letter of the constructor so that we can tell them apart from other functions.
We shouldn’t call constructor functions without the new operator.
So we don’t write:
const jane = Person('jane', 'writer');
The value of this won’t be set to the returned Person instance this way.
The Global Object
The global object in the browser is the window object.
We can add properties to it with var at the top level:
var a = 1;
Then window.a would be 1.
Calling a constructor without new will return undefined .
So if we have:
const jane = Person('jane', 'writer');
then jane is undefined .
The built-in global functions are properties of the global object.
So parseInt is the same as window.parseInt .
Conclusion
We can access object properties in 2 ways.
Also, we can create constructor functions to create objects with a set structure.