---
title: "Tìm hiểu các phương thức call, apply, bind trong JavaScript"
description: "Trong bài \"Tìm hiểu về this trong JavaScript\", chúng ta có sử dụng phương thức bind() để fix một số bug khi sử dụng this. Cụ thể nó là phương thức như thế nào thì chúng ta cùng nhau tìm hiểu trong bài này nhé 😉."
canonical: "https://200lab.io/blog/cac-phuong-thuc-call-apply-bind-trong-javascript"
published: "2021-08-29T01:00:00Z"
updated: "2026-08-21T07:17:50Z"
authors: ["TỪ QUỐC HƯNG"]
tags: ["Javascript", "Frontend"]
reading_minutes: 3
access: "public"
---

Trong bài "Tìm hiểu về `this` trong JavaScript", chúng ta có sử dụng phương thức `bind()` để fix một số bug khi sử dụng `this`. Cụ thể nó là phương thức như thế nào thì chúng ta cùng nhau tìm hiểu trong bài này nhé 😉.

Như các bạn biết đấy, trong JavaScript, function cũng được xem là một object, do đó nó cũng có các phương thức hữu ích như: `call()`, `apply()` và `bind()`. Ba ông thần này hiện tại bạn sẽ thấy ít khi mà dùng nó, tuy nhiên nếu trở thành dev JavaScript lành nghề thì chắc chắn các bạn phải nắm rõ chúng khi làm việc với **NodeJS** và **Mongodb**.

**Lưu ý**: Trước khi đi tiếp tục tìm hiểu các phương thức này, nếu chưa biết hoặc chưa nắm rõ kiến thức về ông thần `this` thì mình khuyên bạn nên tìm đọc lại bài viết "Tìm hiểu về `this` trong JavaScript" của mình để nắm rõ hơn rồi quay lại nhé 😁.

## I. Call() method.

Phương thức `call()` cho phép bạn gọi function và truyền vào một **object** và các đối số(argument) cách nhau bởi dấu phẩy (Comma).

Cú pháp của `call()` như sau:

```
function.call(thisArg, arg_1, arg_2,...);
```

Ví dụ:

```
let person = {
	firstName: "Ken",
    lastName: "Kaneki",
}

function saySomeThing(param_1, param_2) {
	console.log(param_1 + " " + param_2 + ", " + this.firstName + " " + this.lastName);
}

saySomeThing.call(person, "Welcome to", "200Lab");
//-->Output: Welcome to 200Lab, Ken Kaneki
```

## II. Apply() method.

Phương thức `apply()` cũng tương tự như `call()`, nhưng nó khác ở chỗ nó truyền vào các đối số thông qua mảng, cú pháp của nó như sau:

```
function.apply(thisArg, [argsArray]);
```

Cùng xem ví dụ cho dễ hiểu nhé 😉

```
let person = {
	firstName: "Ken",
    lastName: "Kaneki",
}

function saySomeThing(param_1, param_2) {
	console.log(param_1 + " " + param_2 + ", " + this.firstName + " " + this.lastName);
}

saySomeThing.apply(person, ["Welcome to", "200Lab"]);
//-->Output: Welcome to 200Lab, Ken Kaneki
```

## III. Bind() method.

Phương thức `bind()` có chút đặc biệt hơn, nó trả về một function mới, nó cũng cho phép ta truyền vào một **objectb **và các đối số ngăn cách nhau bởi dấu phẩy, cú pháp của `bind()` như sau.

```
let newFunction = func.bind(thisArg[, arg1[, arg2[, ...]]]);
```

Ví dụ:

```
let person = {
	firstName: "Steve",
    lastName: "Rogers",
};

function saySomeThing(param_1, param_2) {
	console.log(param_1 + " " + param_2 + ", " + this.firstName + " " + this.lastName);
}

const say = saySomeThing.bind(person, "Hello", "captain");
say();
//-->Output: Hello captain, Steve Rogers
```

> Một lưu ý chung cho cả ba phương thức trên là `this` sẽ đề cập đến object mà ta truyền vào.

## IV. Tổng kết.

Nhìn chung thì cả ba phương thức đều có những nét tương đồng, trong đó `call()` và `apply()` là gần giống nhau nhất, với `bind()` thì hơi khác chút nhưng cả ba đều không khó hiểu như ông thần `this` 🤣.

Hy vọng qua bài viết này sẽ giúp cho các bạn nắm được kiến thức về các phương thức này cũng như phân phiệt được sự giống và khác nhau giữ chúng, những kiến thức này cũng sẽ giúp ích cho các bạn trong quá trình phỏng vấn cũng như làm việc đấy 😉.

Cảm ơn các bạn đã đọc 🤗.

## Đọc thêm

- [Event Loop là gì? Cơ chế hoạt động của Event Loop trong JavaScript](https://200lab.io/blog/event-loop-la-gi.md): Event Loop là một cơ chế cho phép xử lý các tác vụ bất đồng bộ trong JavaScript, sử dụng một vòng lặp vô tận để kiểm tra, quản lý các tác vụ.
- [So sánh Golang và NodeJS chi tiết](https://200lab.io/blog/so-sanh-golang-vs-nodejs.md): Golang và NodeJS khác nhau như thế nào? Golang và Nodejs từ lâu đã trở thành chủ đề sôi nổi. Nodejs đã chiếm ưu thế trong một khoảng thời gian dài. Golang liệu có đủ sức thuyết phục để chuyển đổi?
- [ReactJS Tutorial for Beginners Phần 2](https://200lab.io/blog/reactjs-tutorial-for-beginners-phan-2.md): Trong bài viết này chúng ta sẽ đi qua năm nội dung đầu tiên của tutorial
- [ReactJS vs React Native - Gà cùng một mẹ liệu có giống nhau?](https://200lab.io/blog/reactjs-vs-react-native.md): Bạn có đang rối giữa ReactJS vs React Native? Nên chọn cái nào thì tốt hơn? Có thể tái sử dụng code của ReactJS cho React Native hay không? Hãy khám phá câu trả lời thông qua bài viết so sánh ReactJS vs React Native này bạn nhé!
- [Netflix Clone với ReactJS, Styled Components và Firebase (Firestore & Auth) - Phần 7](https://200lab.io/blog/netflix-clone-voi-reactjs-styled-components-va-firebase-firestore-auth-phan-7.md): Nối tiếp phần 6 của series, trong phần này, chúng ta sẽ bắt tay vào code Sign Up page,config lại phần router để đáp ứng được vấn đề Authentication kèm theo tạo custom hook để listening for Authentication. Không dài dòng nữa, Chúng ta bắt đầu thôi 😁.
- [Mọi bài viết chủ đề Javascript](https://200lab.io/blog/tags/javascript.md)

Toàn bộ nội dung: https://200lab.io/llms.txt
