【发布时间】:2013-11-27 13:31:15
【问题描述】:
我想知道是否可以在对象中本地使用变量 (var) 以使其从外部不可见并同时在其上放置属性(get、set 方法):jsfiddle.net/9jT3B 在示例中的日志中,所有日期都将相同,我认为是因为我在 defineProperties 函数中使用了 Leave 对象的原型,不是吗?
提前谢谢你。
var a = [
{
"u": 0,
"l": [
{ "start": new Date(2013, 9, 25), "end": new Date(2013, 10, 2), "type": "B", "desc": "" },
{ "start": new Date(2013, 10, 3), "end": new Date(2013, 10, 3), "type": "O", "desc": "Description 1" },
{ "start": new Date(2013, 10, 9), "end": new Date(2013, 10, 10), "type": "T", "desc": "" },
{ "start": new Date(2013, 10, 23), "end": new Date(2013, 10, 28), "type": "S", "desc": "" },
{ "start": new Date(2013, 10, 29), "end": new Date(2013, 11, 10), "type": "O", "desc": "Description 2" }
]
},
{
"u": 1,
"l": [
{ "start": new Date(2013, 10, 14), "end": new Date(2013, 10, 14), "type": "S", "desc": "" },
{ "start": new Date(2013, 10, 20), "end": new Date(2013, 10, 30), "type": "B", "desc": "" }
]
}
];
function Leave (id, start, end, type, desc, ghost) {
var _id = id;
var _start = start;
var _end = end;
var _type = type;
var _desc = desc;
var _ghost = ghost !== undefined ? ghost : false;
Object.defineProperties(Leave.prototype, {
start: {
set: function (x) {
_start = x;
},
get: function () {
return _start;
},
enumerable: true,
configurable: true
},
end: {
set: function (x) {
_end = x;
},
get: function () {
return _end;
},
enumerable: true,
configurable: true
},
type: {
set: function (x) {
_type = x;
},
get: function () {
return _type;
},
enumerable: true,
configurable: true
},
desc: {
set: function (x) {
_desc = x;
},
get: function () {
return _desc;
},
enumerable: true,
configurable: true
}
});
};
var b = [];
function load(json) {
for(var i = 0; i < json.length; i++) {
var u = [json[i].u, [[], [], [], [], [], [], [], [], [], [], [], []]];
for(var j = 0; j < json[i].l.length; j++) {
var act = new Leave("", json[i].l[j].start, json[i].l[j].end, json[i].l[j].type, json[i].l[j].desc);
u[1][json[i].l[j].start.getMonth()].push(act);
}
b.push(u);
}
}
load(a);
console.log(b);
【问题讨论】:
标签: javascript oop properties