Hướng dẫn can you create class in javascript? - bạn có thể tạo lớp học trong javascript không?
Ecmascript 2015, còn được gọi là ES6, đã giới thiệu các lớp JavaScript. Show
Các lớp JavaScript là các mẫu cho các đối tượng JavaScript. Cú pháp lớp JavaScriptSử dụng từ khóa 8 để tạo một lớp.Luôn thêm một phương thức có tên 9:Cú pháp lớp lớp {& nbsp; người xây dựng() { ... } } Thí dụ Lớp xe {& nbsp; constructor (tên, năm) {& nbsp; & nbsp; & nbsp; this.name = name; & nbsp; & nbsp; & nbsp; this.year = năm; & nbsp; }} Ví dụ trên tạo ra một lớp có tên là "xe". Lớp có hai thuộc tính ban đầu: "Tên" và "Năm". Một lớp JavaScript không phải là một đối tượng.not an object. Nó là một mẫu cho các đối tượng JavaScript.template for JavaScript objects. Sử dụng một lớp họcKhi bạn có một lớp, bạn có thể sử dụng lớp để tạo đối tượng: Thí dụ Lớp xe {& nbsp; constructor (tên, năm) {& nbsp; & nbsp; & nbsp; this.name = name; & nbsp; & nbsp; & nbsp; this.year = năm; & nbsp; }} Ví dụ trên tạo ra một lớp có tên là "xe". Lớp có hai thuộc tính ban đầu: "Tên" và "Năm".Car class to create two Car objects. Một lớp JavaScript không phải là một đối tượng. Nó là một mẫu cho các đối tượng JavaScript.Sử dụng một lớp học
Ví dụ trên sử dụng lớp xe để tạo hai đối tượng xe. Phương thức cấu trúc được gọi tự động khi một đối tượng mới được tạo.Phương pháp tạo hàm Sử dụng từ khóa 8 để tạo một lớp.Luôn thêm một phương thức có tên 9:Cú pháp Cú pháp lớp lớp {& nbsp; người xây dựng() { ... } } Thí dụ Thí dụ Lớp xe {& nbsp; constructor (tên, năm) {& nbsp; & nbsp; & nbsp; this.name = name; & nbsp; & nbsp; & nbsp; this.year = năm; & nbsp; }} Ví dụ trên tạo ra một lớp có tên là "xe". Ví dụ trên tạo ra một lớp có tên là "xe". Lớp có hai thuộc tính ban đầu: "Tên" và "Năm". Thí dụ Lớp xe {& nbsp; constructor (tên, năm) {& nbsp; & nbsp; & nbsp; this.name = name; & nbsp; & nbsp; & nbsp; this.year = năm; & nbsp; }} Ví dụ trên tạo ra một lớp có tên là "xe". Lớp có hai thuộc tính ban đầu: "Tên" và "Năm". Ví dụ trên tạo ra một lớp có tên là "xe". Lớp có hai thuộc tính ban đầu: "Tên" và "Năm".Một lớp JavaScript không phải là một đối tượng.
Phương thức cấu trúc được gọi tự động khi một đối tượng mới được tạo. Các lớp là một mẫu để tạo đối tượng. Họ gói gọn dữ liệu với mã để làm việc trên dữ liệu đó. Các lớp trong JS được xây dựng trên các nguyên mẫu nhưng cũng có một số cú pháp và ngữ nghĩa không được chia sẻ với ngữ nghĩa giống như lớp ES5. Trên thực tế, các lớp là "các hàm đặc biệt" và giống như bạn có thể xác định các biểu thức chức năng và khai báo chức năng, cú pháp lớp có hai thành phần: biểu thức lớp và khai báo lớp. Một cách để xác định một lớp là sử dụng khai báo lớp. Để khai báo một lớp, bạn sử dụng từ khóa
KéoMột sự khác biệt quan trọng giữa khai báo chức năng và khai báo lớp là trong khi các hàm có thể được gọi trong mã xuất hiện trước khi chúng được xác định, các lớp phải được xác định trước khi chúng có thể được xây dựng. Mã như sau sẽ ném 3:function declarations and class declarations is that while functions can be called in code that appears before they are defined, classes must be defined before they can be
constructed. Code like the following will throw a 3:
Điều này xảy ra bởi vì trong khi lớp được nâng các giá trị của nó không được khởi tạo. Biểu thức lớp họcMột biểu thức lớp là một cách khác để xác định một lớp. Biểu thức lớp có thể được đặt tên hoặc không tên. Tên được đặt cho một biểu thức lớp được đặt tên là cục bộ với cơ thể của lớp. Tuy nhiên, nó có thể được truy cập thông qua thuộc tính 4.class expression is another way to define a class. Class expressions can be named or unnamed. The name given to a named class expression is local to the class's body. However, it can be accessed via the
4 property.
LƯU Ý: Các biểu thức lớp phải được khai báo trước khi chúng có thể được sử dụng (chúng phải tuân theo các hạn chế kéo tương tự như được mô tả trong phần khai báo lớp). Class expressions must be declared before they can be used (they are subject to the same hoisting restrictions as described in the class declarations section). Định nghĩa cơ thể và phương phápCơ thể của một lớp là phần trong ngoặc xoăn 5. Đây là nơi bạn xác định các thành viên lớp, chẳng hạn như phương thức hoặc hàm tạo.Chế độ nghiêm ngặtCơ thể của một lớp được thực thi ở chế độ nghiêm ngặt, tức là, mã được viết ở đây phải chịu cú pháp nghiêm ngặt hơn để tăng hiệu suất, một số lỗi im lặng sẽ được ném và một số từ khóa được dành cho các phiên bản trong tương lai của Ecmascript. Người xây dựngPhương thức Constructor là một phương thức đặc biệt để tạo và khởi tạo một đối tượng được tạo bằng 8. Chỉ có thể có một phương pháp đặc biệt với tên "Constructor" trong một lớp. Một 7 sẽ được ném nếu lớp chứa nhiều hơn một lần xuất hiện của phương pháp 8.Một hàm tạo có thể sử dụng từ khóa 9 để gọi hàm tạo của siêu lớp.Khối khởi tạo tĩnhCác khối khởi tạo tĩnh cho phép khởi tạo linh hoạt các thuộc tính tĩnh bao gồm cả việc đánh giá các câu lệnh trong quá trình khởi tạo và cấp quyền truy cập vào phạm vi riêng. Nhiều khối tĩnh có thể được khai báo và chúng có thể được xen kẽ với khai báo các thuộc tính và phương thức tĩnh (tất cả các mục tĩnh được đánh giá theo thứ tự khai báo). Phương pháp nguyên mẫuXem thêm Định nghĩa phương pháp.
Phương pháp máy phát điệnXem thêm Trình lặp và máy phát điện.
Phương pháp và tính chất tĩnhTừ khóa tĩnh xác định một phương thức hoặc thuộc tính tĩnh cho một lớp. Các thành viên tĩnh (thuộc tính và phương thức) được gọi mà không cần khởi tạo lớp của họ và không thể được gọi thông qua một thể hiện lớp. Các phương thức tĩnh thường được sử dụng để tạo các chức năng tiện ích cho một ứng dụng, trong khi các thuộc tính tĩnh rất hữu ích cho bộ đệm, cấu hình cố định hoặc bất kỳ dữ liệu nào khác mà bạn không cần phải được sao chép trên các trường hợp.cannot be called through a class instance. Static methods are often used to create utility functions for an application, whereas static properties are useful for caches, fixed-configuration, or any other data you don't need to be replicated across instances.
Liên kết class Rectangle { constructor(height, width) { this.height = height; this.width = width; } // Getter get area() { return this.calcArea(); } // Method calcArea() { return this.height * this.width; } } const square = new Rectangle(10, 10); console.log(square.area); // 100 0 với phương pháp nguyên mẫu và tĩnhKhi phương thức tĩnh hoặc nguyên mẫu được gọi mà không có giá trị cho 0, chẳng hạn như bằng cách gán phương thức cho một biến và sau đó gọi nó, giá trị 0 sẽ là 3 bên trong phương thức. Hành vi này sẽ giống nhau ngay cả khi chỉ thị 4 không có mặt, bởi vì mã trong ranh giới cú pháp của cơ thể 8 luôn được thực thi ở chế độ nghiêm ngặt.
Nếu chúng ta viết lại ở trên bằng cách sử dụng cú pháp dựa trên chức năng truyền thống ở chế độ không đóng cửa, thì các cuộc gọi phương thức 0 sẽ tự động bị ràng buộc với giá trị 0 ban đầu, theo mặc định là đối tượng toàn cầu. Trong chế độ nghiêm ngặt, tự động hóa sẽ không xảy ra; Giá trị của 0 vẫn được thông qua.
Thuộc tính thể hiệnThuộc tính thể hiện phải được xác định bên trong các phương thức lớp:
Tuyên bố thực địaTuyên bố lĩnh vực công cộngVới cú pháp khai báo trường JavaScript, ví dụ trên có thể được viết là:
Chúng tôi không cần các từ khóa như 9, 0 hoặc 1 để khai báo các trường.Bằng cách tuyên bố các trường trước, các định nghĩa lớp trở nên tự ghi chép hơn và các trường luôn luôn có mặt. Như đã thấy ở trên, các trường có thể được khai báo có hoặc không có giá trị mặc định. Xem các trường lớp công cộng để biết thêm thông tin. Tuyên bố lĩnh vực tư nhânSử dụng các trường riêng, định nghĩa có thể được tinh chỉnh như dưới đây. 0Đó là một lỗi để tham khảo các trường riêng từ bên ngoài lớp; Chúng chỉ có thể được đọc hoặc viết trong cơ thể lớp. Bằng cách xác định những thứ không hiển thị bên ngoài lớp, bạn đảm bảo rằng người dùng của lớp bạn không thể phụ thuộc vào nội bộ, có thể thay đổi từ phiên bản này sang phiên bản khác. LƯU Ý: Các trường riêng chỉ có thể được khai báo về phía trước trong khai báo trường. Private fields can only be declared up-front in a field declaration. Các trường riêng không thể được tạo sau đó thông qua việc gán cho chúng, cách mà các thuộc tính bình thường có thể. Để biết thêm thông tin, hãy xem các tính năng của lớp riêng. Phân loại phụ với class Polygon { constructor(...sides) { this.sides = sides; } // Method *getSides() { for (const side of this.sides) { yield side; } } } const pentagon = new Polygon(1,2,3,4,5); console.log([...pentagon.getSides()]); // [1,2,3,4,5] 2Từ khóa 2 được sử dụng trong các khai báo lớp hoặc biểu thức lớp để tạo một lớp như một đứa trẻ của một lớp khác. 1Nếu có một hàm tạo có trong lớp con, trước tiên nó cần gọi Super () trước khi sử dụng "This". Người ta cũng có thể mở rộng các "lớp" dựa trên chức năng truyền thống: 2Lưu ý rằng các lớp không thể mở rộng các đối tượng thường xuyên (không thể xây dựng). Nếu bạn muốn kế thừa từ một đối tượng thông thường, thay vào đó bạn có thể sử dụng 4: 3LoàiBạn có thể muốn trả về các đối tượng 5 trong lớp mảng xuất phát của bạn 6. Mô hình loài cho phép bạn ghi đè các nhà xây dựng mặc định.Ví dụ: khi sử dụng các phương thức như 7 trả về hàm tạo mặc định, bạn muốn các phương thức này trả về đối tượng cha mẹ 5, thay vì đối tượng 6. Biểu tượng 0 cho phép bạn làm điều này: 4Các cuộc gọi siêu lớp với // unnamed let Rectangle = class { constructor(height, width) { this.height = height; this.width = width; } }; console.log(Rectangle.name); // "Rectangle" // named Rectangle = class Rectangle2 { constructor(height, width) { this.height = height; this.width = width; } }; console.log(Rectangle.name); // "Rectangle2" 9Từ khóa 9 được sử dụng để gọi các phương thức tương ứng của siêu lớp. Đây là một lợi thế so với kế thừa dựa trên nguyên mẫu. 5Mix-insTóm tắt các lớp con hoặc hỗn hợp là các mẫu cho các lớp. Một lớp Ecmascript chỉ có thể có một siêu lớp duy nhất, do đó, nhiều kế thừa từ các lớp công cụ, chẳng hạn, là không thể. Các chức năng phải được cung cấp bởi siêu lớp. Một chức năng có siêu lớp dưới dạng đầu vào và lớp con mở rộng siêu lớp đó làm đầu ra có thể được sử dụng để thực hiện các bản phối trong ecmascript: 6Một lớp sử dụng các bản phối này sau đó có thể được viết như thế này: 7Chạy lại một định nghĩa lớp họcMột lớp học không thể được xác định lại. Cố gắng làm như vậy tạo ra một 7.Nếu bạn đang thử nghiệm mã trong trình duyệt web, chẳng hạn như bảng điều khiển web Firefox (Công cụ> Nhà phát triển web> Bảng điều khiển web) và bạn 'chạy' định nghĩa về một lớp có cùng tên hai lần, bạn sẽ nhận được 4. .Tools > Web Developer > Web Console) and you 'Run' a definition of a class with the same name twice, you'll get a 4. (See further discussion of this issue in
bug 1428672.) Doing something similar in Chrome Developer Tools gives you a message like 5.Thông số kỹ thuật
Tính tương thích của trình duyệt webBảng BCD chỉ tải trong trình duyệt Xem thêmTại sao lớp không được sử dụng trong JavaScript?Các đối tượng được xác định với các lớp phải sử dụng từ khóa 'này'.Nếu bạn chuyển phương thức lớp của mình cho một cuộc gọi lại, bạn có thể gặp các vấn đề ràng buộc.Đây là lý do tại sao bạn sẽ thấy rất nhiều mã trong đó phương thức phải được ràng buộc với bối cảnh chính xác.. If you pass your class method to a callback, you can run into binding issues. This is why you will see a lot of code where the method has to be bound to the correct context.
Các lớp học có tốt để sử dụng trong JavaScript không?Trong JavaScript, bạn không!Bạn có thể viết bất kỳ chương trình nào bạn muốn mà không cần sử dụng các lớp học hoặc từ khóa này!Thật vậy, cú pháp lớp có phần mới đối với JavaScript và mã định hướng đối tượng đã được viết với các chức năng trước.Cú pháp lớp chỉ là đường cú pháp so với cách tiếp cận dựa trên chức năng đó với OOP.you don't! You can write any program you want without utilizing classes or the this keyword ever! Indeed, the class syntax is somewhat new to JavaScript, and object oriented code was written with functions beforehand. The class syntax is just syntactic sugar over that function-based approach to OOP. |