2009-02-20 31 views
5

tôi có thể ủy nhiệm một chức năng duy nhất trong javascript bằng cách làm một cái gì đó như thế này (chỉ jotted xuống từ bộ nhớ để chịu với tôi)Proxy động trong javascript?

function addAroundAdvice(target){ 
    var targetFunction = target.aFunction; 
    target.aFunction = new function(){ 
      invokePreCall(); 
      targetFunction.apply(target, arguments); 
      invokePostCall(); 
    } 
} 

Là một lập trình viên java Tôi muốn nghĩ về điều này như là một proxy động. Mỗi khi tôi viết mã như thế này tôi nghĩ rằng ai đó phải đã thực hiện một thư viện thực sự thông minh mà các hoạt động proxy phổ biến đó là ít nhất 10% tốt hơn so với những gì tôi có thể làm trong một vội vàng. Tôi sẽ mong đợi một số công cụ như chặn tất cả các phương pháp một cách chính xác cho bất kỳ đối tượng nhất định, mà có thể không hoàn toàn tầm thường. Sau đó, có nhiều loại lời khuyên khác nhau. Vì vậy, trong khi tôi không mong đợi một cái gì đó kích thước của scriptaculous, nó chắc chắn hơn 6 dòng mã.

Vậy các thư viện này ở đâu?

+0

Nó sẽ giúp để biết những gì bạn đang cố gắng để đạt được. – cletus

+0

Tôi chưa từng thấy chúng, nhưng tôi có khuynh hướng NIH ... –

+0

Tôi vẫn chưa hiểu điểm: bạn muốn có thư viện để lưu lại 6 dòng mã? Thư viện có chi phí cao trong Javascript (trong khi trong C#/Java bạn dường như có họ chỉ cos bạn có thể). Tôi không thể nói rằng tôi đã từng cần viết xung quanh lời khuyên trong Javascript. – cletus

Trả lời

4

Hãy thử jQuery AOP plugin

Nhìn vào source dường như chỉ sử dụng jQuery như một không gian tên, vì vậy bạn có thể thử này Plugin thậm chí nếu không muốn sử dụng jQuery.

+0

Oooo. Trông đầy hứa hẹn. – krosenvold

0

Thực tế là bạn đã có thể làm điều đó tôi nghĩ rằng có một thư viện để đạt được nó dưới dạng JavaScript thuần túy, ví dụ trên của bạn. Patterns thiết kế có thể được áp dụng cho JavaScript như bạn đã biết, vì vậy tôi nghĩ rằng những lời khuyên tôi sẽ cung cấp cho bạn là sau bởi một nhà phát triển Google và Yahoo GUI:

http://jsdesignpatterns.com/

Chương 14: Các Proxy Pattern. Tham khảo có giải pháp cho bạn. Bạn vẫn có thể thích cách tiếp cận của bạn hoặc bạn có thể tìm thấy lời khuyên từ cách tiếp cận của họ.

Chúc mừng,

Andrew

+0

Cảm ơn, tôi đã đặt cuốn sách vào giỏ mua hàng amazon của mình. Tôi biết làm thế nào để làm hầu hết những điều này, nhưng tôi chán ăn liên tục tái phát minh ra bánh xe này. – krosenvold

+0

Lol, điểm tốt! :-) –

+0

Đề xuất tốt đẹp! Chỉ cần mua sách điện tử. –

0

Tôi không nghĩ rằng bạn có thể chặn tất cả các chức năng.

Điều tốt nhất bạn có thể làm là lặp qua tất cả các yếu tố của một đối tượng và tìm kiếm bất kỳ chức năng:

for elem in someObject { 
    if typeof(elem) == "function" { 
     // replace the function 
    } 
} 

Vấn đề là, nếu bạn thêm một chức năng sau nó không chuyển qua proxy.

Các vấn đề liên quan