Home >Web Front-end >JS Tutorial >Why Should You Avoid Arrow Functions When Defining ES6 Object Methods?
Using Arrow Functions in ES6 Objects
In ES6, there are two ways to define object methods: using traditional function syntax and using the shorthand form. Both of these methods are valid:
var chopper = { owner: 'Zed', getOwner: function() { return this.owner; } };
var chopper = { owner: 'Zed', getOwner() { return this.owner; } }
However, using arrow functions in object methods presents a different story. Let's explore this in more detail.
Arrow Functions and Object Methods
Arrow functions are not suitable for defining object methods. This is because they inherit the this value of the surrounding lexical context, which may not be the same as the this value within the object.
For instance, consider the following code:
var chopper = { owner: 'John', getOwner: () => { return this.owner; } };
In this example, this within the getOwner method refers to the window object (or the globalThis object in strict mode), not the chopper object. As a result, the this.owner expression will return undefined, throwing an error.
Traditional Function Syntax vs. ES6 Method Syntax
For defining object methods, it is advisable to use traditional function syntax or the ES6 method syntax, both of which explicitly define the this value within the method.
Here's an example using traditional function syntax:
var chopper = { owner: 'Zed', getOwner: function() { return this.owner; } };
And here's an example using ES6 method syntax:
var chopper = { owner: 'Zed', getOwner() { return this.owner; } };
These methods use the this keyword to refer to the current object, ensuring that the this.owner expression returns the correct value.
Conclusion
While arrow functions offer a concise syntax for defining simple functions, they are not suitable for use as object methods in ES6. For this purpose, it is recommended to stick to traditional function syntax or the ES6 method syntax, both of which provide a clearer and more reliable way to define methods on objects.
The above is the detailed content of Why Should You Avoid Arrow Functions When Defining ES6 Object Methods?. For more information, please follow other related articles on the PHP Chinese website!