Chức năng lưu trữ trong đối tượng JavaScript
Không lưu trữ logic ứng dụng trong cơ sở dữ liệu. Có những hạn chế về hiệu suất khi chạy JavaScript bên trong MongoDB. Mã ứng dụng cũng thường hiệu quả nhất khi nó chia sẻ quyền kiểm soát phiên bản với chính ứng dụng đó Show
Có một bộ sưu tập hệ thống đặc biệt có tên 7 có thể lưu trữ các hàm JavaScript để sử dụng lạiĐể lưu trữ một chức năng, bạn có thể sử dụng 8, như trong các ví dụ sau
Các hàm này, được lưu dưới dạng JavaScript loại BSON, có sẵn để sử dụng từ bất kỳ ngữ cảnh JavaScript nào, chẳng hạn như 1 và 2Tuy nhiên, các chức năng được lưu dưới dạng JavaScript loại BSON không dùng nữa (có phạm vi) không thể được sử dụng bởi 1 và 2 bắt đầu từ MongoDB 4. 4 Ở đây chúng ta vừa sử dụng một Biểu thức Hàm để tạo một hàm và gán nó cho thuộc tính 2 của đối tượngSau đó, chúng ta có thể gọi nó là 3. Người dùng bây giờ có thể nóiMột chức năng là một thuộc tính của một đối tượng được gọi là phương thức của nó Vì vậy, ở đây chúng ta có một phương thức 4 của đối tượng 1Tất nhiên, chúng ta có thể sử dụng một hàm được khai báo trước như một phương thức, như thế này
Lập trình hướng đối tượng Khi chúng ta viết mã bằng cách sử dụng các đối tượng để biểu diễn các thực thể, điều đó được gọi ngắn gọn là lập trình hướng đối tượng. “Ồ” OOP là một điều lớn lao, một ngành khoa học thú vị của riêng nó. Làm thế nào để chọn đúng thực thể? . Các yếu tố của phần mềm hướng đối tượng có thể tái sử dụng” của E. Gamma, R. Mũ bảo hiểm, R. Johnson, J. Vissides hoặc “Phân tích và thiết kế hướng đối tượng với các ứng dụng” của G. Boochvà hơn thế nữa phương pháp tốc kýTồn tại một cú pháp ngắn hơn cho các phương thức trong một đối tượng bằng chữ
Như đã minh họa, chúng ta có thể bỏ qua 6 và chỉ viết 7Nói thật, các ký hiệu không hoàn toàn giống nhau. Có những khác biệt tinh tế liên quan đến kế thừa đối tượng (sẽ được đề cập sau), nhưng hiện tại chúng không quan trọng. Trong hầu hết các trường hợp, cú pháp ngắn hơn được ưu tiên “cái này” trong các phương thứcThông thường, một phương thức đối tượng cần truy cập thông tin được lưu trữ trong đối tượng để thực hiện công việc của nó Chẳng hạn, mã bên trong 3 có thể cần tên của 1Để truy cập đối tượng, một phương thức có thể sử dụng từ khóa 0Giá trị của 0 là đối tượng “trước dấu chấm”, đối tượng được sử dụng để gọi phương thứcVí dụ 3Ở đây trong quá trình thực hiện của 3, giá trị của 0 sẽ là 1Về mặt kỹ thuật, cũng có thể truy cập đối tượng mà không cần 0, bằng cách tham chiếu nó thông qua biến bên ngoài 8…Nhưng mã như vậy là không đáng tin cậy. Nếu chúng tôi quyết định sao chép 1 sang một biến khác, e. g. 7 và ghi đè lên 1 bằng thứ khác, sau đó nó sẽ truy cập sai đối tượngĐiều đó được chứng minh dưới đây 2Nếu chúng tôi sử dụng 9 thay vì 0 bên trong 1, thì mã sẽ hoạt động"cái này" không bị ràng buộcTrong JavaScript, từ khóa 0 hoạt động không giống như hầu hết các ngôn ngữ lập trình khác. Nó có thể được sử dụng trong bất kỳ chức năng nào, ngay cả khi nó không phải là phương thức của đối tượngKhông có lỗi cú pháp trong ví dụ sau 7Giá trị của 0 được đánh giá trong thời gian chạy, tùy thuộc vào ngữ cảnhChẳng hạn, ở đây, cùng một chức năng được gán cho hai đối tượng khác nhau và có “cái này” khác nhau trong các lời gọi 9Quy tắc rất đơn giản. nếu 4 được gọi, thì 0 là 6 trong cuộc gọi của 7. Vì vậy, nó là 1 hoặc 9 trong ví dụ trênGọi không có đối tượng. Chúng ta thậm chí có thể gọi hàm mà không cần đối tượng nào cả 7Trong trường hợp này, 0 là 32 ở chế độ nghiêm ngặt. Nếu chúng tôi cố gắng truy cập vào 9, sẽ có lỗiỞ chế độ không nghiêm ngặt, giá trị của 0 trong trường hợp đó sẽ là đối tượng toàn cầu ( 35 trong trình duyệt, chúng ta sẽ nói về nó sau trong chương Đối tượng toàn cầu). Đây là một hành vi lịch sử mà 36 sửa chữaThông thường cuộc gọi như vậy là một lỗi lập trình. Nếu có 0 bên trong một hàm, nó sẽ được gọi trong ngữ cảnh đối tượngHậu quả của việc không gắn kết Nếu bạn đến từ một ngôn ngữ lập trình khác, thì có lẽ bạn đã quen với ý tưởng về "_______50 bị ràng buộc", trong đó các phương thức được định nghĩa trong một đối tượng luôn có 0 tham chiếu tới đối tượng đóTrong JavaScript, 0 là "miễn phí", giá trị của nó được đánh giá tại thời điểm gọi và không phụ thuộc vào nơi phương thức được khai báo, mà phụ thuộc vào đối tượng nào "trước dấu chấm"Khái niệm về thời gian chạy được đánh giá 0 có cả ưu điểm và nhược điểm. Một mặt, một chức năng có thể được sử dụng lại cho các đối tượng khác nhau. Mặt khác, tính linh hoạt cao hơn tạo ra nhiều khả năng mắc sai lầm hơn.Ở đây, vị trí của chúng tôi không phải là đánh giá liệu quyết định thiết kế ngôn ngữ này là tốt hay xấu. Chúng tôi sẽ hiểu cách làm việc với nó, cách nhận được lợi ích và tránh các vấn đề Các chức năng mũi tên không có "cái này"Chức năng mũi tên là đặc biệt. họ không có 0 “của riêng mình”. Nếu chúng ta tham chiếu 0 từ một hàm như vậy, thì nó được lấy từ hàm “bình thường” bên ngoàiChẳng hạn, ở đây 85 sử dụng phương thức 0 từ phương thức 3 bên ngoài 0Đó là một tính năng đặc biệt của hàm mũi tên, nó rất hữu ích khi chúng ta thực sự không muốn có một 0 riêng mà muốn lấy nó từ bối cảnh bên ngoài. Ở phần sau của chương Các hàm mũi tên được xem xét lại, chúng ta sẽ tìm hiểu sâu hơn về các hàm mũi tênBản tóm tắt
Giá trị của 0 được xác định trong thời gian chạy
Xin lưu ý rằng các chức năng mũi tên là đặc biệt. họ không có 0. Khi 0 được truy cập bên trong hàm mũi tên, nó được lấy từ bên ngoài
Bạn có thể lưu trữ một chức năng trong một đối tượng JavaScript không?Trong JavaScript, hàm được gọi là Đối tượng hàm vì chúng là đối tượng. Cũng giống như các đối tượng, các hàm có các thuộc tính và phương thức, chúng có thể được lưu trữ trong một biến hoặc một mảng và được truyền dưới dạng đối số cho các hàm khác.
Những gì có thể được lưu trữ trong một đối tượng JavaScript?Các loại dữ liệu nguyên thủy như số, booleans và chuỗi an toàn cho JSON, trong khi các giá trị như hàm, không xác định, ký hiệu, đối tượng ngày tháng không an toàn cho JSON.
Một đối tượng có thể có chức năng như một thuộc tính không?Phương thức—đặt hàm làm thuộc tính của đối tượng. Trong JavaScript, bạn có thể sử dụng hàm làm giá trị, giống như số, chuỗi và đối tượng . Điều đó có nghĩa là bạn có thể truyền chúng dưới dạng đối số, trả về chúng từ các hàm khác và đặt chúng làm thuộc tính của đối tượng.
Chúng ta có thể lưu trữ hàm trong một biến trong JavaScript không?Các hàm được lưu trong biến không cần tên hàm . Chúng luôn được gọi (được gọi) bằng cách sử dụng tên biến. Hàm trên kết thúc bằng dấu chấm phẩy vì nó là một phần của câu lệnh thực thi. |