Tôi có nên sử dụng tính năng mới trong javascript không?

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

Bản tóm tắt

  • 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

Điều gì xảy ra nếu bạn không sử dụng new trong JavaScript?

Sử dụng từ khóa mới KHÔNG phải là 'xấu'. Nhưng nếu bạn quên, bạn sẽ gọi hàm tạo đối tượng như một hàm thông thường . Nếu hàm tạo của bạn không kiểm tra ngữ cảnh thực thi của nó thì nó sẽ không nhận thấy rằng 'cái này' trỏ đến đối tượng khác (thường là đối tượng toàn cục) thay vì đối tượng mới.

Từ khóa mới có cần thiết trong JavaScript không?

Từ khóa mới trong JavaScript được sử dụng để tạo một thể hiện của đối tượng có hàm tạo . Khi gọi hàm tạo bằng toán tử 'mới', các hành động sau được thực hiện. Một đối tượng trống mới được tạo.

Mục đích của từ khóa mới là gì?

new là một từ khóa Java. Nó tạo một đối tượng Java và cấp phát bộ nhớ cho nó trên heap . new cũng được sử dụng để tạo mảng, vì mảng cũng là đối tượng.

Có gì mới trong JavaScript?

Các tính năng mới trong ECMAScript 2022 bao gồm chờ đợi cấp cao nhất, chỉ số đối sánh RegExp, trường lớp công khai và riêng tư mới , v.v. Bắt đầu nào. ECMAScript 2022 (ES13) ra mắt vào ngày 22 tháng 6, mã hóa loạt tính năng mới nhất cho JavaScript.