使用defineProperty扩展,在哪里放私有变量?

时间:2015-01-01 13:12:58

标签: javascript angularjs

我有以下工厂,我在其中使用新属性扩展了Timesheet:start。但是我不知道怎么做不正确,因为_start似乎处于错误的水平。所有时间表条目都返回相同的开始。

如何将其放入时间表?

.factory('Timesheets', function($resource, LinkData) {
  var Timesheet = $resource('http://127.0.0.1:3000/api/v1/timesheets/:id',{id:'@id'}, {update:{method:'PUT'}});

  var _start;

  Object.defineProperty(Timesheet.prototype, 'start', {
    get: function() {
      if (_start == undefined){
        _start = moment(this.time_start).format();
      }
      return _start;
    },
    set: function(value) {
      if (moment(value).isValid()) {
        this.time_start = value;
        _start = value;
      }
    }
  });

1 个答案:

答案 0 :(得分:1)

角度服务设计为单身,因此总有一个_start

你想要的可能是将_start放在Timesheet对象中。

module.factory('Timesheets', function($resource, LinkData) {
    var Timesheet = $resource('http://127.0.0.1:3000/api/v1/timesheets/:id',{id:'@id'}, {update:{method:'PUT'}});

    return {
        getTimesheetObj: getTimesheetObj
    }

    function getTimesheetObj() {

        var timesheet = new Timesheet();
        timesheet._start = undefined;

        Object.defineProperty(timesheet, 'start', {
            get: function() {
                if (this._start === undefined){
                    this._start = moment(this.time_start).format();
                }
                return this._start;
            },
            set: function(value) {
                if (moment(value).isValid()) {
                this.time_start = value;
                this._start = value;
            }
        };

        return timesheet;
    }

});