In this class, we will explore some advanced concepts related to JavaScript objects.
JavaScript objects come with built-in methods that allow us to perform various operations on objects. These methods provide powerful functionalities for working with objects. Some commonly used built-in methods for objects include:
Object.keys(obj)
: Returns an array of the keys of an object.Object.values(obj)
: Returns an array of the values of an object.Object.entries(obj)
: Returns an array of key-value pairs of an object.
In this exercise, you will explore the MDN (Mozilla Developer Network) documentation for object methods in JavaScript. Follow these steps:
-
Visit the MDN website.
-
Search for "Object methods" and click on the "Object" link in the search results.
-
Explore the list of object methods provided.
-
Choose an interesting method and read its description, syntax, and usage examples.
-
Prepare a presentation highlighting the method's name, functionality, syntax, and examples.
-
Practice your presentation to ensure clarity.
-
Present your findings to the class, encouraging questions and discussions.
-
Take notes during other students' presentations to expand your knowledge.
By completing this exercise, you'll become familiar with using MDN documentation and deepen your understanding of JavaScript object methods.
In JavaScript, the this
keyword refers to the current object and is a powerful tool for accessing and manipulating object properties and methods. It allows you to refer to the context in which a function is executed. Understanding how this
works is essential for working effectively with objects in JavaScript.
Let's explore this example to better understand how this
works:
const person = {
name: 'John',
greet: function() {
console.log(`Hello, ${this.name}!`);
}
};
person.greet();
Follow the instructions in robot.js only the Method context.
The value of this
depends on how a function is called. It can have different meanings in different situations:
- Global Context: When
this
is used outside of any function or object, it refers to the global object. In web browsers, the global object is thewindow
object.
console.log(this) //in the terminal && in browser
function tryThis() {
return this
}
console.log(tryThis())
- Method Invocation: When a function is called as a method of an object,
this
refers to the object on which the method is being called.
function getThis() {
return `this is a ${this.name}`
}
const pen = {
name: 'pen',
getThis
}
console.log(pen.getThis())
const marker = {
name: 'marker',
getThis,
}
console.log(marker.getThis())
const pencil = {
name: 'pencil'
}
pencil.identity = getThis
console.log(pencil.identity())
- Explicit Binding: The
this
keyword can be explicitly set using methods likecall()
,apply()
, orbind()
, which allow you to specify the object that should be bound tothis
within a function.
const crayon = {
name:'crayon'
}
const showCrayon = getThis.bind(crayon)
console.log(showCrayon())
getThis.call(crayon)
- Constructor Invocation: When a function is used as a constructor function with the
new
keyword,this
refers to the newly created instance.
Follow the instructions in robot.js only the Binding context.
When it comes to arrow functions, the behavior of the "this"
keyword is a bit different. Arrow functions do not have their own "this"
value. Instead, they inherit the value of "this"
from the surrounding scope, which is the context in which the arrow function is defined.
To put it simply, when we use the "this"
keyword inside a regular function, it refers to the object that the function is being called on. But when we use the "this"
keyword inside an arrow function, it will not have its own "this"
value and will instead inherit it from the surrounding scope.
Lets see how it works:
// Regular Function
const person = {
name: "John",
age: 30,
greet: function() {
console.log("Hello, my name is " + this.name);
}
};
person.greet();
// Arrow Function
const person = {
name: "John",
age: 30,
greet: () => {
console.log("Hello, my name is " + this.name);
}
};
person.greet();
In the first example, the greet()
function inside the person
object uses the "this"
keyword, which refers to the person
object itself. So, when calling person.greet()
, it correctly outputs the person's name.
In the second example, the greet()
function is defined as an arrow function. Arrow functions do not bind their own "this"
value and instead inherit it from the surrounding scope, which is the global
scope in this case. As a result, accessing this.name
inside the arrow function returns undefined
.
To summarize, regular functions have their own "this"
value determined by the object they belong to, while arrow functions inherit the "this"
value from the surrounding scope.
This difference is important to keep in mind because it affects how we access and use the "this" keyword in different contexts. Regular functions and arrow functions behave differently in terms of how they handle the "this"
keyword.
Follow the instructions in rocket.js
In JavaScript, object destructuring is a convenient way to extract individual properties from an object and assign them to variables. It provides a concise syntax for accessing and working with object properties.
To destructure an object, you use the following syntax:
Here, name
is the property you want to extract from user
. You can provide multiple property names separated by commas.
Consider the following object:
const person = {
name: 'John',
age: 30,
city: 'New York'
};
If you want to extract the name
and age
properties from the person
object, you can use object destructuring as follows:
const { name, age } = person;
console.log(name); // Output: John
console.log(age); // Output: 30
In this example, we created two variables name
and age
and assigned them the values of the corresponding properties from the person
object. Now, you can directly use name
and age
variables instead of person.name
and person.age
.
In this class, we have covered the concepts of built-in Object methods, "this" keyword, arrow functions, and destructured assignment. Understanding these advanced concepts will enhance your skills in working with JavaScript objects.