編寫角度服務時,我發現了一種我認爲非常方便的圖案。我認爲它適合修飾器模式的描述。給定對象的數組:數據對象陣列上裝飾圖案的替代方案
players = [{
name: 'Fred',
counter: 0
},{
name: 'Fritz',
counter: 0
},{
name: 'Frank',
counter: 0
}];
將它傳遞給視圖或控制器之前,我使其通過一個裝飾功能:
players.forEach(decorate);
這個函數增加了方便的方法,每一個對象,允許改變它們在放置,而無需檢索對象的索引的:
function decorate(p) {
p.reset = function() {
this.counter = 0;
};
p.increment = function() {
this.counter += 1;
};
p.bonus = function() {
this.counter += 10;
};
p.penalty = function() {
this.counter -= 10;
};
}
這是一個沒有角也是有用的,但特別是與角它允許簡單的事件結合無線薄ng-repeat
指令。
<div ng-repeat="player in players">
<div ng-click="player.reset()">reset {{player.name}}</div>
</div>
考慮到服務可能被多個控制器引用,簡化接口對代碼的結尾有相當的影響。
撇開性能問題,你看到這種方法的缺點嗎?或者你是否看到過一種你認爲更好的不同方面的模式(例如使用new
)?
你可以看着[混入](HTTP:/ /javascriptweblog.wordpress.com/2011/05/31/a-fresh-look-at-javascript-mixins/)概念。 – Tibos
您可以通過使用原型來提高性能,例如'players = players.map(createInstance)' – Bergi
看起來像修飾器模式 –