在下面的代码中,输出将是相同的.
function dateObject() {
this.date = new Date();
}
var wrapper = {
dateObj: new dateObject()
};
console.log(wrapper.dateObj.date);
setTimeout(function () {
console.log(wrapper.dateObj.date);
}, 3000);
Run Code Online (Sandbox Code Playgroud)
我实际上偶然发现了这个检查,以确保财产的价值不会改变,但现在我很好奇.有没有办法让一个属性不是一个函数,而是一个函数的评估,每次都是新的?我问,因为你可以用其他语言来做(想想System.DateTime用C#).
这是一个例子:
function DateObject(time) {
this._date = new Date(time);
}
Object.defineProperty(DateObject, "now", {
get: function () {
return new DateObject(Date.now());
}
});
Object.defineProperty(DateObject.prototype, "time", {
get: function () {
return this._date.getTime();
}
});
Run Code Online (Sandbox Code Playgroud)
然后每次引用此属性时,它将等于函数评估的结果get:
// calls new DateObject(Date.now()), like Date.Now in C#
var d = DateObject.now;
// calls d._date.getTime()
d.time;
Run Code Online (Sandbox Code Playgroud)
如您所见,now已定义DateObject.这就像一个静态属性.然后time在对象的原型上定义,这意味着它将是实例的属性DateObject.
注意:研究第三个参数的enumerable和configurable属性Object.defineProperty.它们很有用.
| 归档时间: |
|
| 查看次数: |
75 次 |
| 最近记录: |