2015-05-01 7 views
5

reify ile JavaScript nesneleri oluştururken, ^:export ile yöntemleri nasıl işaretleyebilirim, böylece Google Closure derleyicisi bunları gelişmiş modda yeniden adlandırmaz? Örneğin^reply ile oluşturulan yöntemleri ^: export ile nasıl işaretleyebilirim, böylece Closure derleyicisi bunları yeniden adlandırmaz?

:

(reify 
    Object 
    (foo [this] ...) 
    (bar [this] ...)) 

Ben

(reify 
    Object 
    (^:export foo [this] ...) 
    (^:export bar [this] ...)) 

denedim ama bu yardımcı görünmüyor ve isimler hala gelişmiş optimizasyonlar ile değişti.

Bunu yapmanın bir yolu yoksa, özellikleri bir işlev olarak ayarlamak için düz js-obj oluşturmak ve set! kullanarak, yöntemlerle bir JavaScript nesnesini nasıl yapılandırabilirim (Gelişmiş bir şekilde nasıl engelleneceğimi bilmiyorum) şeyleri kırmadan optimizasyonlar ya)?

cevap

6

Protokol yöntemlerinde, reified nesnenizden doğrudan yöntem olarak değil, JS olarak adlandıracağınız gibi ^:export ürününü sağlamanız gerekir.

(ns example.core) 

(defprotocol MyProtocol 
    (^:export foo [this]) 

(defn ^:export create [] 
    (reify 
    MyProtocol 
    (foo [this] "bar"))) 

Sonra JS onu kullanabilirsiniz:

var a = example.core.create(); 
var b = example.core.foo(a); 
// b = "bar" 

Ben orijinal foo adıyla JS akım cljs.jar ile denedim ve optimize yayılan.

İlgili konular