'Định nghĩa' được sử dụng cho JavaScript là gì (ngoài điều hiển nhiên)?


161

Tôi đã tìm kiếm cao và thấp cho các tài liệu về điều này, nhưng tôi không thể tìm thấy bất cứ điều gì ở bất cứ đâu.

Tôi đang sử dụng Aloha và muốn sử dụng nguyên mẫu thanh bên của họ để tạo một thanh bên mới của riêng tôi được gắn với chức năng plugin khác.

Sidebar.js của họ bắt đầu với điều này, nhưng tôi không thể tìm thấy bất kỳ tài liệu nào giải thích ý nghĩa của nó.

define( [
    'aloha/core',
    'aloha/jquery',
    'aloha/selection'
], function (Aloha, jQuery, Selection, Plugin) {

Sau đó, nó tiếp tục trong trình bao bọc đó để xác định một loạt các chức năng, varsvà một số proptotypes- mà tôi có thể tìm hiểu về ...

Câu nói đó là gì hoặc tôi có thể tìm thấy lời giải thích ở đâu?


Câu trả lời:


173

Tôi không thể nói chắc chắn mà không nhìn thấy toàn bộ tập lệnh, nhưng nó có thể là definehàm từ RequireJS , đặc biệt là dạng " xác định với phụ thuộc " của hàm đó. Nó được sử dụng để định nghĩa một "mô-đun":

Một mô-đun khác với tệp tập lệnh truyền thống ở chỗ nó xác định một đối tượng có phạm vi tốt, tránh gây ô nhiễm không gian tên toàn cầu. Nó có thể liệt kê rõ ràng các phụ thuộc của nó và xử lý các phụ thuộc đó mà không cần tham chiếu đến các đối tượng toàn cục, nhưng thay vào đó nhận các phụ thuộc dưới dạng đối số cho hàm xác định mô-đun.

Và dạng "xác định với phụ thuộc" defineđược mô tả như sau:

Nếu mô-đun có các phụ thuộc, đối số đầu tiên phải là một mảng các tên phụ thuộc và đối số thứ hai phải là một hàm định nghĩa. Hàm sẽ được gọi để xác định mô-đun một khi tất cả các phụ thuộc đã được tải. Hàm sẽ trả về một đối tượng xác định mô-đun.


1
yep thats chắc chắn nó- nên một phần của require.js và sử dụng đánh dấu mà bạn cần requirejs.org
David O'Sullivan

4
và phiên bản nào của IE không hỗ trợ điều này ... ;-)
Simon_Weaver

1
@Simon_Weaver - Không chắc ý của bạn là gì ... RequireJS được IE6 + hỗ trợ .
James Allardice

đó là điều tốt để biết :) Tôi đã hơi khó tính, nhưng tôi cũng nghĩ rằng đây là một cấu trúc mới hơn IE6
Simon_Weaver

1
@Simon_Weaver Đây không phải là cấu trúc ngôn ngữ Javascript, đây là chức năng Javascript thông thường. Dấu ngoặc vuông tạo một mảng. Hay đó là cấu trúc mà bạn đang đề cập đến?
Robin Green

3

Đây là mẫu AMD để viết các mô-đun mà AMD là viết tắt của Định nghĩa mô-đun không đồng bộ khi bạn cần nhập các mô-đun không đồng bộ về cơ bản chứ không phải là một cái gì đó như commonJS.

define(['module1', 'module2'], function(module1, module2) {
  console.log(module1.sayHi());
});

Define lấy một loạt các phụ thuộc và một khi tất cả những thứ đó được tải trong nền (không đồng bộ) theo cách không chặn, xác định các cuộc gọi gọi lại lần lượt chấp nhận các đối số (trong trường hợp này là các phụ thuộc).

Một điều cần lưu ý là mỗi một trong các mô-đun đó cũng cần được xác định bằng cách sử dụng từ khóa "xác định". Vì vậy, ví dụ module1 sẽ được định nghĩa như dưới đây:

define([], function() {

  return {
    sayHi: function() {
      console.log('Hi Hi');
    },
  };
});

Cách viết mô-đun (AMD) này cho phép bạn viết với khả năng tương thích trình duyệt (không yêu cầu () như trong nodeJS) và bạn cũng có thể định nghĩa nhiều định dạng bao gồm các đối tượng, JSON, v.v. trong khi đó, CommonJS cần các mô-đun làm đối tượng.

Hãy nhớ rằng, AMD có nhược điểm riêng của nó. Hy vọng điều này sẽ giúp được ai đó.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.