DEV Community

Cover image for How to create your own custom array methods in JavaScript
The Huferr
The Huferr

Posted on

How to create your own custom array methods in JavaScript

Hey, it's Huferr.

Today, you will learn how to create your own custom array methods in Javascript.

To understand the process of creating a new method, you must first know what prototype is.

Before continuing, you must know that is not a good practice to change/add methods into natives objects! BUT, understanding how it works is a great way to learn more about the language itself!

๐Ÿ”Ž What is prototype in JavaScript?

Every object in JavaScript has a built-in property, which is called its prototype (or __proto__ in most browsers).

The prototype is an object, so the prototype will have its own prototype, making what's called a prototype chain. The chain ends when we reach a prototype that has null for its own prototype.

Simplifying, It keeps the current object methods and allows you to add new properties and methods to objects.

For example, if you console.log(Object.prototype), you'll see something like this:

Object methods

These are basically object methods that you can use in a common object in JavaScript!

๐Ÿ“œ Array object

As you may know, almost everything in Javascript is an object.

It means that we also have an object called Array. Every array is an object in JavaScript:



const myArray = [0,1,2]

console.log(typeof myArray) // 'object'


Enter fullscreen mode Exit fullscreen mode

โœ… New array method

Let's create our new custom array method called duplicate().

This method will be responsible for duplicating the current array.

Example:



const numbers = [1,2,3]

const duplicatedNumbers = numbers.duplicate()

console.log(duplicatedNumbers) // [1,2,3,1,2,3]


Enter fullscreen mode Exit fullscreen mode

To add this new method, we need to add our function in the Array object prototype:



Array.prototype.duplicate = ...


Enter fullscreen mode Exit fullscreen mode

Now, we can simply create our function with the needed logic and assign it into this new property we added: duplicate.

To do that, we're going to use the function statement.

You can't use an arrow function in this scenario, since we need the function's this keyword, and it's only available for functions statements.

So, let's create it:



Array.prototype.duplicate = function() {
  const array = this // Just for readability purposes

  return [...array, ...array] // Duplicating the array
}


Enter fullscreen mode Exit fullscreen mode

In this case, the this keyword refers to the array you are using the method.

So, if you do myArray.duplicate(), myArray will be exactly the this inside our function.

๐Ÿฅณ Congratulations! I've created your first custom array method, here's the full code:



Array.prototype.duplicate = function () {
  const array = this // Just for readability purposes

  return [...array, ...array] // Duplicating the array
}

const myArray = [1,2,3]

const duplicatedArray = myArray.duplicate()

console.log(duplicatedArray) // [1,2,3,1,2,3]


Enter fullscreen mode Exit fullscreen mode

Thanks for reading this article! Help spreading knowledge!

Follow me on:

๐Ÿ“น Youtube => https://www.youtube.com/@thehuferr
๐Ÿงต X/Twitter => https://twitter.com/the_huferr

Top comments (2)

Collapse
 
jonrandy profile image
Jon Randy ๐ŸŽ–๏ธ • Edited

Whilst this is indeed possible, it really isn't recommended to 'monkey patch' native language objects in this way on anything other than small, self-contained projects with no external dependencies (and even then, it isn't a great idea).

This is for two main reasons:

  1. You cannot guarantee that any 3rd-party library you might be using might also try to patch the native object with a method with the same name
  2. You cannot guarantee that the language itself will not be updated to include a method on that native object with the same name

One way around this is to safely monkey patch native objects with methods that are named using Symbols - this guarantees that they will never clash. I actually built a whole library based around this concept:

Collapse
 
thehuferr profile image
The Huferr

Totally Jon! The purpose of this article is to show what we can actually do with prototype and how things are done in a basic way.

I added a section warning the reader about this practice.

Thanks!