Tôi có thể gọi một phương thức trong hàm tạo JavaScript không?

Từ khóa “this” trong Java được sử dụng như một tham chiếu đến đối tượng hiện tại, với một phương thức thể hiện hoặc một hàm tạo. Sử dụng điều này, bạn có thể giới thiệu các thành viên của một lớp như hàm tạo, biến và phương thức

Gọi một phương thức sử dụng từ khóa này từ một hàm tạo

Có, như đã đề cập, chúng ta có thể gọi tất cả các thành viên của một lớp [phương thức, biến và hàm tạo] từ các phương thức thể hiện hoặc, hàm tạo

Ví dụ

Trong chương trình Java sau, lớp Sinh viên chứa hai biến riêng name và age với các phương thức setter và một hàm tạo được tham số hóa chấp nhận hai giá trị này

Từ hàm tạo, chúng tôi đang gọi các phương thức setName[] và setAge[] bằng cách sử dụng từ khóa "this" bằng cách chuyển các giá trị tên và tuổi thu được cho chúng tương ứng

Từ phương thức chính, chúng tôi đang đọc các giá trị tên và tuổi từ người dùng và gọi hàm tạo bằng cách chuyển chúng. Sau đó, chúng tôi đang hiển thị các giá trị của tên và lớp của các biến thể hiện bằng cách sử dụng phương thức display[]

Cú pháp

function User[name] {
  // this = {};  [implicitly]

  // add properties to this
  this.name = name;
  this.isAdmin = false;

  // return this;  [implicitly]
}
0 thông thường cho phép chúng ta tạo một đối tượng. Nhưng thường thì chúng ta cần tạo nhiều đối tượng tương tự, như nhiều người dùng hoặc mục menu, v.v.

Điều đó có thể được thực hiện bằng cách sử dụng hàm tạo và toán tử

function User[name] {
  // this = {};  [implicitly]

  // add properties to this
  this.name = name;
  this.isAdmin = false;

  // return this;  [implicitly]
}
1

Hàm xây dựng

Các hàm xây dựng về mặt kỹ thuật là các hàm thông thường. Có hai quy ước mặc dù

  1. Họ được đặt tên với chữ in hoa đầu tiên
  2. Chúng chỉ nên được thực thi với toán tử
    function User[name] {
      // this = {};  [implicitly]
    
      // add properties to this
      this.name = name;
      this.isAdmin = false;
    
      // return this;  [implicitly]
    }
    1

Ví dụ

function User[name] {
  this.name = name;
  this.isAdmin = false;
}

let user = new User["Jack"];

alert[user.name]; // Jack
alert[user.isAdmin]; // false

Khi một hàm được thực thi với

function User[name] {
  // this = {};  [implicitly]

  // add properties to this
  this.name = name;
  this.isAdmin = false;

  // return this;  [implicitly]
}
3, nó sẽ thực hiện các bước sau

  1. Một đối tượng trống mới được tạo và gán cho
    function User[name] {
      // this = {};  [implicitly]
    
      // add properties to this
      this.name = name;
      this.isAdmin = false;
    
      // return this;  [implicitly]
    }
    4
  2. Thân hàm thực thi. Thông thường, nó sửa đổi
    function User[name] {
      // this = {};  [implicitly]
    
      // add properties to this
      this.name = name;
      this.isAdmin = false;
    
      // return this;  [implicitly]
    }
    4, thêm thuộc tính mới cho nó
  3. Giá trị của
    function User[name] {
      // this = {};  [implicitly]
    
      // add properties to this
      this.name = name;
      this.isAdmin = false;
    
      // return this;  [implicitly]
    }
    4 được trả về

Nói cách khác,

function User[name] {
  // this = {};  [implicitly]

  // add properties to this
  this.name = name;
  this.isAdmin = false;

  // return this;  [implicitly]
}
7 làm điều gì đó giống như

function User[name] {
  // this = {};  [implicitly]

  // add properties to this
  this.name = name;
  this.isAdmin = false;

  // return this;  [implicitly]
}

Vì vậy,

function User[name] {
  // this = {};  [implicitly]

  // add properties to this
  this.name = name;
  this.isAdmin = false;

  // return this;  [implicitly]
}
8 cho kết quả tương tự như

function User[name] {
  // this = {};  [implicitly]

  // add properties to this
  this.name = name;
  this.isAdmin = false;

  // return this;  [implicitly]
}
1

Bây giờ nếu chúng tôi muốn tạo những người dùng khác, chúng tôi có thể gọi

function User[name] {
  // this = {};  [implicitly]

  // add properties to this
  this.name = name;
  this.isAdmin = false;

  // return this;  [implicitly]
}
9,
function User[name] {
  // this = {};  [implicitly]

  // add properties to this
  this.name = name;
  this.isAdmin = false;

  // return this;  [implicitly]
}
10, v.v. Ngắn hơn nhiều so với sử dụng chữ mỗi lần và cũng dễ đọc

Đó là mục đích chính của các nhà xây dựng - để triển khai mã tạo đối tượng có thể tái sử dụng

Hãy lưu ý một lần nữa – về mặt kỹ thuật, bất kỳ hàm nào [ngoại trừ hàm mũi tên, vì chúng không có

function User[name] {
  // this = {};  [implicitly]

  // add properties to this
  this.name = name;
  this.isAdmin = false;

  // return this;  [implicitly]
}
4] đều có thể được sử dụng làm hàm tạo. Nó có thể chạy với
function User[name] {
  // this = {};  [implicitly]

  // add properties to this
  this.name = name;
  this.isAdmin = false;

  // return this;  [implicitly]
}
3 và nó sẽ thực hiện thuật toán trên. “Chữ in hoa đầu tiên” là một thỏa thuận phổ biến, để làm rõ rằng một chức năng sẽ được chạy với
function User[name] {
  // this = {};  [implicitly]

  // add properties to this
  this.name = name;
  this.isAdmin = false;

  // return this;  [implicitly]
}
3

hàm mới[] { … }

Nếu chúng ta có nhiều dòng mã về việc tạo một đối tượng phức tạp duy nhất, chúng ta có thể gói chúng trong một hàm xây dựng được gọi ngay lập tức, như thế này

function User[name] {
  // this = {};  [implicitly]

  // add properties to this
  this.name = name;
  this.isAdmin = false;

  // return this;  [implicitly]
}
7

Hàm tạo này không thể được gọi lại vì nó không được lưu ở bất kỳ đâu, chỉ được tạo và gọi. Vì vậy, thủ thuật này nhằm mục đích đóng gói mã xây dựng một đối tượng mà không sử dụng lại trong tương lai

Kiểm tra chế độ xây dựng. Mới. Mục tiêu

Nội dung nâng cao

Cú pháp từ phần này hiếm khi được sử dụng, hãy bỏ qua trừ khi bạn muốn biết mọi thứ

Bên trong một hàm, chúng ta có thể kiểm tra xem nó có được gọi với

function User[name] {
  // this = {};  [implicitly]

  // add properties to this
  this.name = name;
  this.isAdmin = false;

  // return this;  [implicitly]
}
3 hay không, bằng cách sử dụng thuộc tính đặc biệt
function User[name] {
  // this = {};  [implicitly]

  // add properties to this
  this.name = name;
  this.isAdmin = false;

  // return this;  [implicitly]
}
15

Nó không được xác định cho các cuộc gọi thông thường và bằng chức năng nếu được gọi bằng

function User[name] {
  // this = {};  [implicitly]

  // add properties to this
  this.name = name;
  this.isAdmin = false;

  // return this;  [implicitly]
}
3

function User[name] {
  // this = {};  [implicitly]

  // add properties to this
  this.name = name;
  this.isAdmin = false;

  // return this;  [implicitly]
}
1

Điều đó có thể được sử dụng bên trong hàm để biết liệu nó được gọi với

function User[name] {
  // this = {};  [implicitly]

  // add properties to this
  this.name = name;
  this.isAdmin = false;

  // return this;  [implicitly]
}
3, “ở chế độ hàm tạo” hay không có nó, “ở chế độ thông thường”

Chúng tôi cũng có thể thực hiện cả cuộc gọi

function User[name] {
  // this = {};  [implicitly]

  // add properties to this
  this.name = name;
  this.isAdmin = false;

  // return this;  [implicitly]
}
3 và thông thường để làm điều tương tự, như thế này

function User[name] {
  // this = {};  [implicitly]

  // add properties to this
  this.name = name;
  this.isAdmin = false;

  // return this;  [implicitly]
}
4

Cách tiếp cận này đôi khi được sử dụng trong các thư viện để làm cho cú pháp linh hoạt hơn. Để mọi người có thể gọi hàm có hoặc không có

function User[name] {
  // this = {};  [implicitly]

  // add properties to this
  this.name = name;
  this.isAdmin = false;

  // return this;  [implicitly]
}
3, và nó vẫn hoạt động

Tuy nhiên, có lẽ không phải là một điều tốt để sử dụng ở mọi nơi, bởi vì việc bỏ qua

function User[name] {
  // this = {};  [implicitly]

  // add properties to this
  this.name = name;
  this.isAdmin = false;

  // return this;  [implicitly]
}
3 làm cho nó ít rõ ràng hơn về những gì đang diễn ra. Với
function User[name] {
  // this = {};  [implicitly]

  // add properties to this
  this.name = name;
  this.isAdmin = false;

  // return this;  [implicitly]
}
3, tất cả chúng ta đều biết rằng đối tượng mới đang được tạo

Trả về từ các nhà xây dựng

Thông thường, các hàm tạo không có câu lệnh

function User[name] {
  // this = {};  [implicitly]

  // add properties to this
  this.name = name;
  this.isAdmin = false;

  // return this;  [implicitly]
}
72. Nhiệm vụ của họ là viết tất cả những thứ cần thiết vào
function User[name] {
  // this = {};  [implicitly]

  // add properties to this
  this.name = name;
  this.isAdmin = false;

  // return this;  [implicitly]
}
4, và nó tự động trở thành kết quả

Nhưng nếu có một câu lệnh

function User[name] {
  // this = {};  [implicitly]

  // add properties to this
  this.name = name;
  this.isAdmin = false;

  // return this;  [implicitly]
}
72, thì quy tắc rất đơn giản

  • Nếu
    function User[name] {
      // this = {};  [implicitly]
    
      // add properties to this
      this.name = name;
      this.isAdmin = false;
    
      // return this;  [implicitly]
    }
    72 được gọi với một đối tượng, thì đối tượng đó sẽ được trả về thay vì
    function User[name] {
      // this = {};  [implicitly]
    
      // add properties to this
      this.name = name;
      this.isAdmin = false;
    
      // return this;  [implicitly]
    }
    4
  • Nếu
    function User[name] {
      // this = {};  [implicitly]
    
      // add properties to this
      this.name = name;
      this.isAdmin = false;
    
      // return this;  [implicitly]
    }
    72 được gọi với số nguyên thủy, nó sẽ bị bỏ qua

Nói cách khác,

function User[name] {
  // this = {};  [implicitly]

  // add properties to this
  this.name = name;
  this.isAdmin = false;

  // return this;  [implicitly]
}
72 với một đối tượng trả về đối tượng đó, trong tất cả các trường hợp khác,
function User[name] {
  // this = {};  [implicitly]

  // add properties to this
  this.name = name;
  this.isAdmin = false;

  // return this;  [implicitly]
}
4 được trả về

Chẳng hạn, ở đây

function User[name] {
  // this = {};  [implicitly]

  // add properties to this
  this.name = name;
  this.isAdmin = false;

  // return this;  [implicitly]
}
72 ghi đè
function User[name] {
  // this = {};  [implicitly]

  // add properties to this
  this.name = name;
  this.isAdmin = false;

  // return this;  [implicitly]
}
4 bằng cách trả về một đối tượng

function User[name] {
  this.name = name;
  this.isAdmin = false;
}

let user = new User["Jack"];

alert[user.name]; // Jack
alert[user.isAdmin]; // false
8

Và đây là một ví dụ với một

function User[name] {
  // this = {};  [implicitly]

  // add properties to this
  this.name = name;
  this.isAdmin = false;

  // return this;  [implicitly]
}
72 trống [hoặc chúng ta có thể đặt một số nguyên thủy sau nó, không thành vấn đề]

function User[name] {
  // this = {};  [implicitly]

  // add properties to this
  this.name = name;
  this.isAdmin = false;

  // return this;  [implicitly]
}
0

Thông thường các hàm tạo không có câu lệnh

function User[name] {
  // this = {};  [implicitly]

  // add properties to this
  this.name = name;
  this.isAdmin = false;

  // return this;  [implicitly]
}
72. Ở đây chúng tôi đề cập đến hành vi đặc biệt với các đối tượng trả về chủ yếu vì mục đích hoàn thiện

Bỏ qua dấu ngoặc đơn

Nhân tiện, chúng ta có thể bỏ dấu ngoặc đơn sau

function User[name] {
  // this = {};  [implicitly]

  // add properties to this
  this.name = name;
  this.isAdmin = false;

  // return this;  [implicitly]
}
3

function User[name] {
  // this = {};  [implicitly]

  // add properties to this
  this.name = name;
  this.isAdmin = false;

  // return this;  [implicitly]
}
3

Bỏ qua dấu ngoặc đơn ở đây không được coi là "phong cách tốt", nhưng cú pháp được cho phép theo đặc điểm kỹ thuật

Các phương thức trong constructor

Sử dụng các hàm xây dựng để tạo các đối tượng mang lại rất nhiều tính linh hoạt. Hàm xây dựng có thể có các tham số xác định cách xây dựng đối tượng và những gì cần đặt trong đó

Tất nhiên, chúng ta có thể thêm vào

function User[name] {
  // this = {};  [implicitly]

  // add properties to this
  this.name = name;
  this.isAdmin = false;

  // return this;  [implicitly]
}
4 không chỉ các thuộc tính mà cả các phương thức

Chẳng hạn,

function User[name] {
  // this = {};  [implicitly]

  // add properties to this
  this.name = name;
  this.isAdmin = false;

  // return this;  [implicitly]
}
16 bên dưới tạo một đối tượng với
function User[name] {
  // this = {};  [implicitly]

  // add properties to this
  this.name = name;
  this.isAdmin = false;

  // return this;  [implicitly]
}
17 đã cho và phương thức
function User[name] {
  // this = {};  [implicitly]

  // add properties to this
  this.name = name;
  this.isAdmin = false;

  // return this;  [implicitly]
}
18

function User[name] {
  // this = {};  [implicitly]

  // add properties to this
  this.name = name;
  this.isAdmin = false;

  // return this;  [implicitly]
}
8

Để tạo các đối tượng phức tạp, có một cú pháp nâng cao hơn, các lớp, mà chúng ta sẽ đề cập sau

Tóm lược

  • Các hàm xây dựng hay ngắn gọn là các hàm tạo là các hàm thông thường, nhưng có một thỏa thuận chung là đặt tên chúng bằng chữ in hoa trước
  • Hàm xây dựng chỉ nên được gọi bằng cách sử dụng
    function User[name] {
      // this = {};  [implicitly]
    
      // add properties to this
      this.name = name;
      this.isAdmin = false;
    
      // return this;  [implicitly]
    }
    3. Một cuộc gọi như vậy ngụ ý tạo một
    function User[name] {
      // this = {};  [implicitly]
    
      // add properties to this
      this.name = name;
      this.isAdmin = false;
    
      // return this;  [implicitly]
    }
    4 trống ở đầu và trả về một cái đã điền ở cuối

Chúng ta có thể sử dụng các hàm tạo để tạo nhiều đối tượng giống nhau

JavaScript cung cấp các hàm tạo cho nhiều đối tượng ngôn ngữ tích hợp. như

function User[name] {
  // this = {};  [implicitly]

  // add properties to this
  this.name = name;
  this.isAdmin = false;

  // return this;  [implicitly]
}
41 cho ngày tháng,
function User[name] {
  // this = {};  [implicitly]

  // add properties to this
  this.name = name;
  this.isAdmin = false;

  // return this;  [implicitly]
}
42 cho bộ và những thứ khác mà chúng tôi dự định nghiên cứu

Đối tượng, chúng tôi sẽ trở lại

Trong chương này chúng ta chỉ trình bày những kiến ​​thức cơ bản về đối tượng và hàm tạo. Chúng rất cần thiết để tìm hiểu thêm về các kiểu dữ liệu và chức năng trong các chương tiếp theo

Sau khi biết điều đó, chúng ta quay lại các đối tượng và tìm hiểu sâu hơn về chúng trong các chương Nguyên mẫu, kế thừa và Lớp

Chúng ta có thể gọi các phương thức từ bên trong hàm tạo không?

Gọi phương thức sử dụng từ khóa này từ hàm tạo . Yes, as mentioned we can call all the members of a class [methods, variables, and constructors] from instance methods or, constructors.

Điều gì xảy ra nếu chúng ta gọi một phương thức trong hàm tạo?

Bạn không nên. gọi phương thức thể hiện trong hàm tạo là nguy hiểm vì đối tượng chưa được khởi tạo đầy đủ [điều này chủ yếu áp dụng cho các phương thức có thể bị ghi đè]. Quá trình xử lý phức tạp trong hàm tạo cũng được biết là có tác động tiêu cực đến khả năng kiểm tra.

Chúng ta có thể gọi một phương thức lớp trong hàm tạo không?

Bạn có thể gọi các phương thức lớp khác từ hàm tạo vì đối tượng đã được khởi tạo .

Chủ Đề