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

Extend using defineProperty, where put the private variable?

我有以下工厂,我在其中使用新属性扩展了时间表:开始。但是我不知何故没有正确地做到这一点,因为 _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;
      }
    }
  });

angular服务被设计为单例,所以总是有一个_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;
    }

});