Dart中是否內置了使其具有可執行類型的功能?如何在Dart中實現可執行類型
在我的JavaScript應用程序我使用了一個名爲Eventable類提供以下功能:在JavaScript
var dog = new Dog() //where Dog inherits from Eventable
var cat = new Cat() //where Cat inherits from Eventable
//use 'on' to listen to events
cat.on(dog, 'bark', cat.runaway); //assuming Cat has a method runaway on its prototype
//use fire to launch events
dog.fire({type: 'bark'}); //this causes cat.runaway(event); to be called
一個很常見的模式,我喜歡它,因爲它可以幫助我保持在src和孤立的對象我腦海。
使用on
方法創建new EventContract
具有(以上'bark'
)基於所述所有者(cat
以上),客戶端(dog
以上)的唯一密鑰,類型和功能(cat.runaway
上文)。這種獨特的鍵允許我以確保不會重複EventContract
s的創建,但更重要的是它讓我保持一個易於查找所有EventContract
的系列S對象有,這樣,我可以打電話:
cat.dispose();
和cat
的所有事件合約都將被銷燬,所以我相信所有對貓的外部引用都已被刪除,貓現在可以GC'd。
但我發現很難實現達特這個功能,因爲這樣做是這樣的:cat.on(dog, 'bark', cat.runaway);
導致生成一個新的功能,以包圍(){cat.runaway();}
和唯一的唯一密鑰,我可以在鏢下車標準函數對象的是它的hashCode,但這意味着我可以記住cat.on(dog, 'bark', cat.runaway);
,它會創建一個新的EventContract
,因爲它創建了另一個獨特的閉包,而不是處理對原始函數的引用,就像在javascript中發生的那樣。
對我來說有沒有辦法在飛鏢中實現這種模式?
謝謝你非常有幫助 – 0xor1 2013-05-09 18:54:57
當然,這是一個屬性訪問器:http://www.dartlang.org/articles/idiomatic-dart/#fields-getters-and-setters – 2013-05-10 20:53:57
謝謝文章鏈接是我正在尋找 – 0xor1 2013-05-10 21:23:04