Các lớp trong ES6 trên thực tế là các hàm. cú pháp
0 mới giới thiệu các biểu thức lớp và khai báo lớp, tương tự như các biểu thức hàm và khai báo hàm
John Doe
Khai báo lớp cho phép định nghĩa một lớp bằng cách sử dụng từ khóa
0 theo sau là tên của lớp tôi. e
John Doe
class Human {
constructor[] {}
}
Điều quan trọng cần nhớ là, không giống như khai báo hàm, khai báo lớp không được nâng lên, điều đó có nghĩa là lớp phải được xác định trước khi sử dụng nó
Biểu thức lớp là cách ít phổ biến hơn để xác định một lớp. tương tự như các biểu thức hàm, nó có thể được đặt tên hoặc đặt tên, i. e
Các chức năng được giới thiệu thông qua cú pháp
0 phải được khởi tạo bằng từ khóa
John Doe
3. Đặc tả ES2015 nói rằng biểu diễn chuỗi của hàm trong JavaScript phải cung cấp cú pháp thực tế của khai báo hàm, biểu thức hàm, khai báo trình tạo, biểu thức trình tạo, khai báo lớp, biểu thức lớp, hàm mũi tên, định nghĩa phương thức hoặc phương thức trình tạo tùy thuộc vào đặc điểm thực tế
John Doe
Vì lý do đó, cách đơn giản nhất để kiểm tra xem một hàm có thuộc lớp ES6 hay không là kiểm tra kết quả của việc áp dụng phương thức
4 trên nó
John Doe
Một lớp JavaScript là một kế hoạch chi tiết để tạo các đối tượng. Một lớp đóng gói dữ liệu và các hàm thao tác dữ liệu
Không giống như các ngôn ngữ lập trình khác như Java và C#, các lớp JavaScript là đường cú pháp trên sự kế thừa nguyên mẫu. Nói cách khác, các lớp ES6 chỉ là các chức năng đặc biệt
Các lớp trước ES6 được xem lại
Trước ES6, JavaScript không có khái niệm về lớp. Để bắt chước một lớp, bạn thường sử dụng mẫu hàm tạo/nguyên mẫu như trong ví dụ sau
Code language: JavaScript [javascript]
function Person[name] { this.name = name; } Person.prototype.getName = function [] { return this.name; }; var john = new Person["John Doe"]; console.log[john.getName[]];
đầu ra
John Doe
Làm thế nào nó hoạt động
Đầu tiên, tạo
3 dưới dạng hàm tạo có tên thuộc tính là
John Doe
4. Hàm
John Doe
5 được gán cho
John Doe
6 để nó có thể được chia sẻ bởi tất cả các phiên bản của loại
John Doe
3
John Doe
Sau đó, tạo một phiên bản mới của loại
3 bằng cách sử dụng toán tử
John Doe
9. Do đó, đối tượng
John Doe
00 là một thể hiện củaCode language: JavaScript [javascript]
function Person[name] { this.name = name; } Person.prototype.getName = function [] { return this.name; }; var john = new Person["John Doe"]; console.log[john.getName[]];
3 và
John Doe
02 thông qua kế thừa nguyên mẫuCode language: JavaScript [javascript]
function Person[name] { this.name = name; } Person.prototype.getName = function [] { return this.name; }; var john = new Person["John Doe"]; console.log[john.getName[]];
Các câu lệnh sau sử dụng toán tử
03 để kiểm tra xemCode language: JavaScript [javascript]
function Person[name] { this.name = name; } Person.prototype.getName = function [] { return this.name; }; var john = new Person["John Doe"]; console.log[john.getName[]];
00 có phải là một thể hiện của loạiCode language: JavaScript [javascript]
function Person[name] { this.name = name; } Person.prototype.getName = function [] { return this.name; }; var john = new Person["John Doe"]; console.log[john.getName[]];
3 và
John Doe
02 khôngCode language: JavaScript [javascript]
function Person[name] { this.name = name; } Person.prototype.getName = function [] { return this.name; }; var john = new Person["John Doe"]; console.log[john.getName[]];
0Code language: JavaScript [javascript]
function Person[name] { this.name = name; } Person.prototype.getName = function [] { return this.name; }; var john = new Person["John Doe"]; console.log[john.getName[]];
Khai báo lớp ES6
ES6 đã giới thiệu một cú pháp mới để khai báo một lớp như trong ví dụ này
8Code language: JavaScript [javascript]
function Person[name] { this.name = name; } Person.prototype.getName = function [] { return this.name; }; var john = new Person["John Doe"]; console.log[john.getName[]];
Lớp
3 này hoạt động giống như loại
John Doe
3 trong ví dụ trước. Tuy nhiên, thay vì sử dụng một hàm tạo/mẫu nguyên mẫu, nó sử dụng từ khóa
John Doe
09Code language: JavaScript [javascript]
function Person[name] { this.name = name; } Person.prototype.getName = function [] { return this.name; }; var john = new Person["John Doe"]; console.log[john.getName[]];
Trong lớp
3, lớp
John Doe
81 là nơi bạn có thể khởi tạo các thuộc tính của một thể hiện. JavaScript tự động gọi phương thứcCode language: JavaScript [javascript]
function Person[name] { this.name = name; } Person.prototype.getName = function [] { return this.name; }; var john = new Person["John Doe"]; console.log[john.getName[]];
81 khi bạn khởi tạo một đối tượng của lớpCode language: JavaScript [javascript]
function Person[name] { this.name = name; } Person.prototype.getName = function [] { return this.name; }; var john = new Person["John Doe"]; console.log[john.getName[]];
Sau đây tạo một đối tượng
3 mới, đối tượng này sẽ tự động gọi
John Doe
81 của lớpCode language: JavaScript [javascript]
function Person[name] { this.name = name; } Person.prototype.getName = function [] { return this.name; }; var john = new Person["John Doe"]; console.log[john.getName[]];
3
John Doe
8
John Doe
5 được gọi là một phương thức của lớp
John Doe
3. Giống như một hàm tạo, bạn có thể gọi các phương thức của một lớp bằng cú pháp sau
John Doe
1
John Doe
Ví dụ
2
John Doe
Để xác minh rằng các lớp là các hàm đặc biệt, bạn có thể sử dụng toán tử
88 của để kiểm tra loại của lớpCode language: JavaScript [javascript]
function Person[name] { this.name = name; } Person.prototype.getName = function [] { return this.name; }; var john = new Person["John Doe"]; console.log[john.getName[]];
3
John Doe
5
John Doe
Nó trả về
80 như mong đợi
John Doe
Đối tượng
00 cũng là một thể hiện của các loạiCode language: JavaScript [javascript]
function Person[name] { this.name = name; } Person.prototype.getName = function [] { return this.name; }; var john = new Person["John Doe"]; console.log[john.getName[]];
3 và
John Doe
02Code language: JavaScript [javascript]
function Person[name] { this.name = name; } Person.prototype.getName = function [] { return this.name; }; var john = new Person["John Doe"]; console.log[john.getName[]];
0Code language: JavaScript [javascript]
function Person[name] { this.name = name; } Person.prototype.getName = function [] { return this.name; }; var john = new Person["John Doe"]; console.log[john.getName[]];
lớp vs. loại tùy chỉnh
Mặc dù có những điểm tương đồng giữa một lớp và một loại tùy chỉnh được xác định thông qua hàm tạo, nhưng vẫn có một số khác biệt quan trọng
Đầu tiên, khai báo lớp không được nâng lên như khai báo hàm
Ví dụ: nếu bạn đặt đoạn mã sau lên trên phần khai báo lớp
3, bạn sẽ nhận được một
John Doe
85
John Doe
8
John Doe
Lỗi
0
John Doe
Thứ hai, tất cả mã bên trong một lớp tự động thực thi ở chế độ nghiêm ngặt. Và bạn không thể thay đổi hành vi này
Thứ ba, các phương thức lớp không thể đếm được. Nếu bạn sử dụng mẫu hàm tạo/mẫu nguyên mẫu, bạn phải sử dụng phương thức
86 để tạo thuộc tính không thể đếm được
John Doe
Cuối cùng, gọi hàm tạo của lớp mà không có toán tử
9 sẽ dẫn đến lỗi như trong ví dụ sau
John Doe
1
John Doe
Lỗi
2
John Doe
Lưu ý rằng có thể gọi hàm tạo mà không cần toán tử
9. Trong trường hợp này, hàm tạo hoạt động như một hàm thông thường
John Doe