Trang chủ » Mã hóa » JavaScript hướng đối tượng (OOJS) 3 cách để tạo trường hợp đối tượng

    JavaScript hướng đối tượng (OOJS) 3 cách để tạo trường hợp đối tượng

    Khi một ngôn ngữ lập trình là tất cả về đồ vật, điều đầu tiên chúng ta cần học là làm thế nào để tạo đối tượng. Tạo các đối tượng trong JavaScript khá dễ dàng: một cặp niềng răng sẽ thực hiện công việc, tuy nhiên, đó là không phải là cách duy nhất để tạo ra một đối tượng cũng không phải cách duy nhất bạn sẽ cần phải sử dụng.

    Trong JavaScript, các thể hiện đối tượng là được tạo từ các đối tượng tích hợp và đi đến sự tồn tại khi chương trình đang chạy. Ví dụ, Ngày là một đối tượng tích hợp cung cấp cho chúng tôi thông tin về ngày. Nếu chúng tôi muốn hiển thị ngày hiện tại trên một trang, chúng tôi cần một ví dụ thời gian chạy của Ngày mang thông tin về ngày hiện tại.

    JavaScript cũng cho phép chúng tôi định nghĩa các đối tượng của chúng ta có thể tạo ra các thể hiện đối tượng của riêng họ trong thời gian chạy. Trong JavaScript, tất cả mọi thứ là một đối tượng và mọi đối tượng đều có một tổ tiên cuối cùng gọi là Vật. Việc tạo ra một thể hiện đối tượng được gọi là khởi tạo.

    1. Mới nhà điều hành

    Một trong những phương thức phổ biến và được biết đến nhiều nhất để tạo một thể hiện đối tượng mới là sử dụng Mới nhà điều hành.

    Bạn cần một constructor để làm cho Mới Người vận hành làm việc. Hàm tạo là một phương thức của một đối tượng kết hợp một ví dụ mới của đối tượng đó. Cú pháp cơ bản của nó trông như thế này:

     nhà xây dựng mới () 

    Một nhà xây dựng có thể chấp nhận lập luận có thể được sử dụng để thay đổi hoặc thêm thuộc tính vào đối tượng mà nó xây dựng. Nhà xây dựng có cùng tên là đối tượng của nó.

    Dưới đây là một ví dụ về cách tạo một ví dụ của Ngày() vật với Mới từ khóa:

     dt = ngày mới (2017, 0, 1) console.log (dt) // Chủ nhật ngày 01 tháng 1 năm 2017 00:00:00 GMT + 0100 

    Ngày() là người xây dựng để tạo mới Ngày vật. Các hàm tạo khác nhau cho một đối tượng tranh luận khác nhau để tạo cùng loại thể hiện đối tượng với thuộc tính đa dạng.

    Không phải tất cả các đối tượng tích hợp trong JavaScript đều có thể được khởi tạo như Ngày. Có những đối tượng không đi kèm với một nhà xây dựng: môn Toán, JSONPhản chiếu, nhưng chúng vẫn là những vật thể bình thường.

    Trong số các đối tượng tích hợp có hàm tạo, Ký hiệu không thể được gọi theo kiểu constructor để khởi tạo một cái mới Ký hiệu ví dụ Nó chỉ có thể là gọi là hàm cái nào trả về cái mới Ký hiệu giá trị.

    Ngoài ra, trong số các đối tượng dựng sẵn có (các) hàm tạo, không phải tất cả đều cần các hàm tạo của chúng được gọi với Mới toán tử để được khởi tạo. Chức năng, Mảng, lỗi, và RegExp cũng có thể được gọi là hàm, không sử dụng Mới từ khóa, và họ sẽ khởi tạo và trả về một thể hiện đối tượng mới.

    2. Phản chiếu vật

    Lập trình viên cuối cùng có thể đã quen thuộc với API phản chiếu. Reflection là một tính năng của ngôn ngữ lập trình để kiểm tra và cập nhật một số thực thể cơ bản, chẳng hạn như các đối tượng và các lớp, trong thời gian chạy.

    Trong JavaScript, bạn đã có thể thực hiện một số hoạt động phản xạ sử dụng Vật. Nhưng, một API phản chiếu thích hợp cuối cùng cũng tồn tại trong JavaScript.

    Các Phản chiếu đối tượng có một tập hợp các phương thức để tạo và cập nhật các thể hiện đối tượng. Các Phản chiếu vật không có người xây dựng, vì vậy nó không thể được khởi tạo với Mới toán tử, và, giống như môn ToánJSON, nó không thể được gọi là một chức năng hoặc.

    Tuy nhiên, Phản chiếu có một tương đương với Mới nhà điều hành: các Reflect.construct () phương pháp.

     Reflect.construct (đích, argumentList [, newTarget]) 

    Cả hai Mục tiêu và tùy chọn mục tiêu mới đối số là các đối tượng có các nhà xây dựng riêng của họ, trong khi đối số danh sách là một danh sách các đối số được chuyển đến nhà xây dựng của Mục tiêu.

     var dt = Reflect.construct (Ngày, [2017, 0, 1]); console.log (dt); // Chủ Nhật ngày 01 tháng 1 năm 2017 00:00:00 GMT + 0100 

    Đoạn mã trên có tác dụng tương tự như bắt đầu Ngày() sử dụng Mới nhà điều hành. Mặc dù bạn vẫn có thể sử dụng Mới, Phản ánh là một Tiêu chuẩn ECMAScript 6. Nó cũng cho phép bạn sử dụng mục tiêu mới tranh luận, đó là một lợi thế khác so với Mới nhà điều hành.

    Giá trị của mục tiêu mớiNguyên mẫu của (chính xác là, nó là nguyên mẫu của mục tiêu mớinhà xây dựng của) trở thành nguyên mẫu của thể hiện mới được tạo.

    Một nguyên mẫu là tài sản của một đối tượng, giá trị của nó là cũng là một đối tượng, mang các thuộc tính của đối tượng ban đầu. Nói tóm lại, một đối tượng có được các thành viên từ nguyên mẫu của nó.

    Ở đây, hãy xem một ví dụ:

     lớp A constructor () this.message = function () console.log ('message from A') class B constructor ()  message () console.log ('message from B')  data () console.log ('data from B') obj = Reflect.construct (A, [], B) console.log (obj.message ()); // thông báo từ A console.log (obj.data ()); // dữ liệu từ B console.log (obj instanceof B) // true 

    Bằng cách vượt qua B là đối số thứ ba để Reflect.construct (), giá trị nguyên mẫu của obj đối tượng là được làm giống như nguyên mẫu của Bconstructor của (có các thuộc tính thông điệpdữ liệu).

    Như vậy, obj có thể truy cập thông điệpdữ liệu, có sẵn tại nguyên mẫu của nó. Nhưng kể từ khi obj được thực hiện bằng cách sử dụng Một, nó cũng có cái riêng thông điệpnhận được tư Một.

    Mặc du obj được xây dựng như một mảng, nó là không phải là một ví dụ của Mảng, bởi vì nguyên mẫu của nó được đặt thành Vật.

     obj = Reflect.construct (Array, [1,2,3], Object) console.log (obj) // Array [1, 2, 3] console.log (obj instanceof Array) // false 

    Reflect.construct () có thể hữu ích khi bạn muốn tạo một đối tượng sử dụng nhiều hơn một bản thiết kế.

    3. Object.create () phương pháp

    Bạn cũng có thể tạo một đối tượng bình thường mới với một nguyên mẫu cụ thể thông qua Object.create (). Điều này cũng có vẻ rất giống với việc sử dụng Mới toán tử, nhưng nó không phải là.

     Object.create (O [, propertyObject]) 

    Các Ôi đối số là một đối tượng phục vụ nguyên mẫu cho các đối tượng mới sẽ được tạo ra. Tùy chọn thuộc tính đối số là một danh sách tài sản bạn có thể muốn thêm vào đối tượng mới.

     class A constructor ()  message () console.log ('message từ A') var obj = Object.create (new A (), data: writable: true, configureable: true, value: function () return 'data from obj') console.log (obj.message ()) // tin nhắn từ A console.log (obj.data ()) // data từ obj obj1 = Object.create ( new A (), foo: writable: true, configureable: true, value: function () return 'foo từ obj1') console.log (obj1.message ()) // tin nhắn từ bảng điều khiển. log (obj1.foo ()) // foo từ obj1 

    bên trong obj đối tượng, tài sản được thêm vào là dữ liệu, trong khi ở obj1, nó là foo. Vì vậy, như bạn thấy, chúng ta có thể có các thuộc tính và phương thức được thêm vào một đối tượng mới.

    Điều này thật tuyệt khi bạn muốn tạo nhiều đối tượng cùng loại nhưng vơi tính chất hoặc phương pháp bổ sung khác nhau. Các Object.create () cú pháp lưu các rắc rối của mã hóa tất cả chúng một cách riêng biệt.