Tôi biết không nên sử dụng đối tượng toàn cục và toàn bộ ý tưởng đằng sau việc sử dụng AMD là tránh sử dụng đối tượng chung. Nhưng đối với một số mã di sản, tôi phải xác định một số nội dung trong đối tượng chung. Hiện nay các mã trông như thế này:truy cập đối tượng toàn cầu khi sử dụng requirejs
//example2.js
define(function(){
var globalObject = window;
globalObject.x = ...
globalObject.y = ...
});
Nó hoạt động nhưng cứng mã hóa các đối tượng toàn cầu window
không trông rất đẹp và tôi tò mò để xem nếu nó có thể loại bỏ nó. Khi define()
không được sử dụng, mã trông như thế này:
//example1.js
x = ...
y = ...
Tôi biết, tôi biết bạn ghét mã này, nhưng chúng ta hãy vào vấn đề: làm thế nào biến toàn cầu có thể được truy cập một cách có cấu trúc bên trong define()
chức năng trong requirejs? Tôi muốn có một cái gì đó giống như một tham số cuối cùng ẩn để các chức năng đó được truyền cho define()
như thế này:
//example3.js
define(function(globalObject){
globalObject.x = ...
globalObject.y = ...
});
Hoặc thậm chí đơn giản hơn: biến this
sẽ trỏ đến đối tượng toàn cầu bên trong hàm đó. Ví dụ:
//example4.js
define(function(){
this.x = ...
this.y = ...
});
Lưu ý: Tôi không chắc chắn về người cuối cùng này. Điều tra biến số this
bên trong hàm được chuyển đến require()
nói rằng nó bằng window
có thể là câu trả lời cho câu hỏi của tôi, nhưng tôi không thể tìm thấy bất kỳ tài liệu nào đề cập đến ngữ cảnh mà hàm đã truyền đang chạy. Có lẽ nó đang chạy trong bối cảnh của biến toàn cầu sau khi tất cả?
đây là một ý tưởng hay, nhưng tôi vẫn tự hỏi liệu có một cơ chế từ bên trong hàm 'define()' không yêu cầu nhúng mã của tôi trong một hàm gọi ngay lập tức? – AlexStack