[英]JavaScript function which acts on itself to extend itself with another object
[英]A Javascript function which creates an object which calls the function itself
我正在嘗試提供一個返回新對象的角度服務。
很好,也很好,而且行得通。 new MakeRoll()
創建一個實例。 但是self.add
在末尾也會調用new MakeRoll()
,並且在調用add時不會像我認為的那樣創建實例。
我可能做錯了所有事情,但我一直無法弄清楚。
var services = angular.module('services', []);
services.factory('Roll', [function() {
var MakeRoll = function () {
var self = {};
self.rolls = [];
self.add = function(number, sizeOfDice, add) {
var newRoll = {};
newRoll.number = number || 1;
newRoll.sizeOfDice = sizeOfDice || 6;
newRoll.add = add || 0;
newRoll.rollDice = function() {
var result = 0;
var results=[];
for (var i = 0; i < newRoll.number; i++) {
var roll = Math.floor(Math.random() * newRoll.sizeOfDice) + 1;
result += roll;
results.push(roll);
}
newRoll.results = results;
newRoll.result = result;
newRoll.Roll = new MakeRoll();
};
self.rolls.push(newRoll);
return self;
};
self.remove = function(index) {
self.rolls.splice(index, 1);
};
self.get = function(index) {
return self.rolls[index];
};
return self;
};
return new MakeRoll();
}
]);
角度服務被設計為單例以完成一些業務邏輯,因此請勿將普通模型與角度服務混淆。 如果您想擁有更多對象,只需創建一個構造函數並將其鏈接到服務中即可對其進行操作。
function MakeRoll() {
...
}
angular.module('service', []).factory('Roll', function () {
var rolls = [];
return {
add: add,
remove: remove,
get: get
}
function add() {
// var o = new MakrRoll();
// rolls.push(o);
}
function remove(o) {
// remove o from rolls
}
function get(o) {
// get o from rolls
}
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.