簡體   English   中英

一個Javascript函數,該函數創建一個對象,該對象調用函數本身

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM