Làm thế nào để bạn ghi đè lên một chức năng javascript?

Cho dù là cố ý hay chỉ đơn giản là sản phẩm phụ của thiết kế, Javascript, là một ngôn ngữ động, cho phép mức độ biểu cảm mà hầu hết mọi lập trình viên dày dặn kinh nghiệm sẽ đánh giá cao. Javascript tự nhiên cung cấp khả năng thực hiện một số mẫu khá hấp dẫn và khá độc đáo;

Ghi đè chức năng

Ghi đè hàm (còn được gọi là “Hàm tự xác định” hoặc “Hàm xác định lười biếng”) cung cấp một mẫu, như đã nêu ở trên, cho phép ghi đè định nghĩa của hàm khi chạy. Điều này có thể được thực hiện từ bên ngoài chức năng, nhưng cũng có thể từ bên trong chính việc triển khai chức năng

Ví dụ: đôi khi một chức năng có thể cần thực hiện một số phần công việc ban đầu, sau đó, tất cả các lệnh gọi tiếp theo sẽ dẫn đến việc thực thi lại mã khởi tạo một cách không cần thiết. Thông thường, sự cố này được giải quyết bằng cách lưu trữ các cờ khởi tạo hoặc tái cấu trúc mã khởi tạo thành một chức năng khác. Mặc dù thiết kế như vậy giải quyết được vấn đề này, nhưng nó lại dẫn đến mã không cần thiết cần được duy trì. Trong JavaScript, có lẽ một cách tiếp cận khác là theo thứ tự. chúng ta có thể chỉ cần xác định lại chức năng sau khi hoàn thành công việc khởi tạo

Một trường hợp sử dụng ứng cử viên khả dĩ cho Ghi đè chức năng là Phát hiện tính năng vì việc phát hiện hỗ trợ tính năng cụ thể trong Trình duyệt thường chỉ cần được kiểm tra một lần, tại thời điểm đó, các kiểm tra tiếp theo là không cần thiết

Dưới đây là một ví dụ cơ bản về việc triển khai Ghi đè chức năng trong bối cảnh trừu tượng hóa API định vị địa lý HTML5

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

 

// Triển khai "getLocation" ban đầu. Vì chúng ta chỉ cần kiểm tra

// để hỗ trợ Định vị địa lý một lần, chúng tôi thực hiện kiểm tra ban đầu và sau đó

// ghi đè cài đặt "getLocation" dựa trên kết quả của

// các bài kiểm tra

var getLocation = function(success, fail, options) {

  if (trình điều hướng. vị trí địa lý) {

    var _options = {

      bật Độ chính xác cao. đúng,

      hết giờ. 60000,

      Tuổi tối đa. 0

    };

 

    // Vị trí địa lý được hỗ trợ nên chúng tôi sẽ ghi đè quá trình triển khai

    // để gọi "định vị địa lý. getCurrentPosition" như ở đó

    // không cần thực hiện lại kiểm tra.

    getLocation = hàm(success, fail, options) {

      vị trí địa lý. getCurrentPosition(thành công,

        không đạt,

        tùy chọn . _options);

    }

    lấy Vị trí(thành công, fail, options);

  } else {

    // Vị trí địa lý không được hỗ trợ nên chúng tôi ghi đè

    // triển khai để chỉ trả về false (a real

   // việc triển khai có thể cung cấp một polyfill tại đây. ).

    getLocation = hàm() {

      trả về false;

    }

  }

};

 

cân nhắc

Vì hàm là đối tượng trong Javascript, điều quan trọng cần lưu ý là nếu bạn thêm thuộc tính hoặc phương thức vào hàm (tĩnh hoặc thông qua nguyên mẫu của hàm), sau đó ghi đè lên hàm, bạn sẽ xóa các thuộc tính hoặc phương thức đó một cách hiệu quả . Ngoài ra, nếu hàm được tham chiếu bởi một biến khác hoặc bởi một phương thức của một đối tượng khác, thì việc triển khai được xác định ban đầu sẽ được giữ nguyên và quá trình ghi đè sẽ không xảy ra. Vì vậy, hãy chú ý khi thực hiện mẫu này. Theo nguyên tắc chung, tôi thường chỉ thực hiện Ghi đè chức năng khi chức năng được xác định lại nằm trong phạm vi riêng tư

suy nghĩ kết luận

Như bạn có thể thấy, Chức năng ghi đè cung cấp một phương tiện thuận tiện để tối ưu hóa việc thực thi mã trong thời gian chạy. Có nhiều trường hợp sử dụng cho các chức năng ghi đè động và khi thích hợp, chúng chắc chắn có thể cung cấp giá trị về hiệu suất và khả năng bảo trì mã

Dưới đây, bạn có thể tìm thấy một ví dụ thể hiện hai cách triển khai Ghi đè hàm cơ bản. Chỉ cần tải trang và thêm một số điểm ngắt trong Firebug để kiểm tra đường dẫn thực thi; .
Ví dụ

Thẻ. mẫu thiết kế, html5, javascript

Mục nhập này đã được đăng vào Thứ Bảy, ngày 19 tháng 11 năm 2011 lúc 2. 45 chiều và được lưu trong Trình duyệt, Mẫu thiết kế, HTML5, JavaScript, Thiết kế hướng đối tượng, Tái cấu trúc. Bạn có thể theo dõi bất kỳ nhận xét nào cho mục này thông qua RSS 2. 0 nguồn cấp dữ liệu. Cả hai nhận xét và ping hiện đang bị đóng

JavaScript có ghi đè không?

JavaScript hỗ trợ ghi đè , vì vậy nếu bạn xác định hai hàm có cùng tên, thì hàm cuối cùng được xác định sẽ ghi đè phiên bản đã xác định trước đó và mỗi khi có lệnh gọi đến hàm đó .

Làm cách nào chúng tôi có thể ghi đè bất kỳ thuộc tính có sẵn nào của JavaScript?

Trong JavaScript, bạn có thể sử dụng phương thức setAttribute() để xác định thuộc tính cho một phần tử . Sử dụng phương pháp tương tự, bạn có thể ghi đè lên. tính chất quan trọng của một phần tử.

Từ khóa nào được sử dụng để vượt qua các chức năng đã có trong JavaScript?

TypeScript trong phiên bản 4. 3 đã giới thiệu từ khóa ghi đè cho phép bạn tuyên bố rõ ràng rằng bạn định ghi đè một phương thức từ một lớp cơ sở.