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