SOLID / DRY principles

In software development, Object-Oriented Design plays a crucial role when it comes to writing flexible, scalable, maintainable, and reusable code. There are so many benefits of using OOD but every developer should also have the knowledge of the SOLID principle for good object-oriented design in programming. The SOLID principles are designed to help developers design robust, maintainable applications. The five SOLID principles are: Single-responsibility principle - Function and classes should have one job. Open–closed principle - Classes and functions should be open for  extension but not for modification. Liskov substitution principle - Child class can replace parent class Interface segregation principle - This principle is the first principle that applies to Interfaces instead of classes in SOLID and it is similar to the single responsibility principle. It states that “do not force any client to implement an interface which is irrelevant to them“. Here your main goal is ...

Difference between Call, Apply and Bind

In JavaScript, the `call`, `apply`, and `bind` methods are used to manipulate the execution context (the value of `this`) of a function. They allow you to control how a function is invoked and provide arguments to the function. Here's a breakdown of their differences and usage:


1. `call`:

   - The `call` method is used to invoke a function with a specified `this` value and individual arguments passed as separate parameters.

   - It takes the `this` value as its first argument, followed by the function arguments.

   - Example:


   function greet(name) {

     console.log("Hello, " + name + "!");

   }


   greet.call(null, "Alice");

   // Output: Hello, Alice!


   const obj = { name: "Bob" };

   greet.call(obj, obj.name);

   // Output: Hello, Bob!

 

   In this example, `call` is used to invoke the `greet` function with a specific `this` value (`null` and `obj`, respectively) and the corresponding arguments.


2. `apply`:

   - The `apply` method is similar to `call`, but it takes arguments as an array or an array-like object.

   - It also allows you to specify the `this` value for the function invocation.

   - Example:


   function greet(name) {

     console.log("Hello, " + name + "!");

   }


   greet.apply(null, ["Alice"]);

   // Output: Hello, Alice!


   const obj = { name: "Bob" };

   greet.apply(obj, [obj.name]);

   // Output: Hello, Bob!

  

   In this example, `apply` is used to invoke the `greet` function with a specific `this` value and an array of arguments.


3. `bind`:

   - The `bind` method creates a new function that, when called, has a specified `this` value and any number of initial arguments.

   - It returns a new function without invoking it immediately.

   - Example:


   function greet(name) {

     console.log("Hello, " + name + "!");

   }


   const boundGreet = greet.bind(null, "Alice");

   boundGreet();

   // Output: Hello, Alice!


   const obj = { name: "Bob" };

   const boundGreetObj = greet.bind(obj, obj.name);

   boundGreetObj();

   // Output: Hello, Bob!


   In this example, `bind` is used to create new functions `boundGreet` and `boundGreetObj` with a specific `this` value and initial arguments. The new functions can be invoked separately.


The main differences between `call`, `apply`, and `bind` are in how they handle arguments and function invocation. `call` and `apply` directly invoke the function, while `bind` returns a new function with the bound `this` value and arguments. `apply` is useful when you have an array of arguments or an array-like object, while `call` and `bind` are suitable for providing arguments directly.


These methods are commonly used in situations where you want to control the context of a function call, such as invoking methods from different objects or reusing functions with preset arguments. 

Comments

Post a Comment

Popular posts from this blog

Difference between localStorage and sessionStorage

Scope in javascript

What is memoization