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
, JSON
và Phả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án
và JSON
, 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ới
Nguyên mẫu của (chính xác là, nó là nguyên mẫu của mục tiêu mới
nhà 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 B
constructor của (có các thuộc tính thông điệp
và dữ liệu
).
Như vậy, obj
có thể truy cập thông điệp
và dữ 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ệp
nó nhậ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.