为什么在日期对象 return 上调用 Object.getOwnPropertyDescriptors 是一个空数组?
Why does calling Object.getOwnPropertyDescriptors on a date object return an empty array?
我正在尝试了解 JavaScript 对象如何充分工作。我知道当你在一个对象上调用 Object.getOwnPropertyDescriptors
时,你会得到一个包含描述符的对象。例如,如果您定义了自己的对象并获得了描述符,您将得到如下内容:
let foo = {
bar: 2
}
Object.getOwnPropertyDescriptors(foo);
// Output:
// {
// bar: {
// value: 2,
// writable: true,
// enumerable: true,
// configurable: true,
// }
// }
同样,如果您获得内置对象的描述符,例如像一个Error
,你可以看到错误对象的描述符。
let foo = new Error();
Object.getOwnPropertyDescriptors(foo);
// Output:
// {
// bar: {
// value: 'Error\n at <anonymous>:1:11',
// writable: true,
// enumerable: false,
// configurable: true,
// }
// }
我知道 属性 是在调用 Error 构造函数时创建的。我刚才所说的一切对我来说都很有意义。但是,当我尝试获取日期对象的描述符时,没有返回任何内容。
let foo = new Date();
Object.getOwnPropertyDescriptors(foo);
// Output:
// {}
我可以通过访问它来获取日期值作为字符串,但为什么没有该值的描述符?
据说日期对象不包含任何自有属性。每 the spec:
21.4.5 Properties of Date Instances
Date instances are ordinary objects that inherit properties from the Date prototype object. Date instances also have a [[DateValue]] internal slot. The [[DateValue]] internal slot is the time value represented by this Date.
就是这样。
给定日期包含的所有信息都在 [[DateValue]]
内部插槽中,不会通过 JavaScript 直接公开 - 它只能通过 Date.prototype
上的方法访问和操作,日期实例继承自的对象。
I can get the value of the date as a string just by accessing it
之所以可行,是因为您将调用 原型 上存在的 toString
方法。例如:
const proto = {
toString() {
return 'foo';
}
};
const instance = Object.create(proto);
console.log(instance.toString());
console.log(Object.getOwnPropertyDescriptors(instance));
对象可以 toString
调用它而无需直接在实例上具有任何属性。
我正在尝试了解 JavaScript 对象如何充分工作。我知道当你在一个对象上调用 Object.getOwnPropertyDescriptors
时,你会得到一个包含描述符的对象。例如,如果您定义了自己的对象并获得了描述符,您将得到如下内容:
let foo = {
bar: 2
}
Object.getOwnPropertyDescriptors(foo);
// Output:
// {
// bar: {
// value: 2,
// writable: true,
// enumerable: true,
// configurable: true,
// }
// }
同样,如果您获得内置对象的描述符,例如像一个Error
,你可以看到错误对象的描述符。
let foo = new Error();
Object.getOwnPropertyDescriptors(foo);
// Output:
// {
// bar: {
// value: 'Error\n at <anonymous>:1:11',
// writable: true,
// enumerable: false,
// configurable: true,
// }
// }
我知道 属性 是在调用 Error 构造函数时创建的。我刚才所说的一切对我来说都很有意义。但是,当我尝试获取日期对象的描述符时,没有返回任何内容。
let foo = new Date();
Object.getOwnPropertyDescriptors(foo);
// Output:
// {}
我可以通过访问它来获取日期值作为字符串,但为什么没有该值的描述符?
据说日期对象不包含任何自有属性。每 the spec:
21.4.5 Properties of Date Instances
Date instances are ordinary objects that inherit properties from the Date prototype object. Date instances also have a [[DateValue]] internal slot. The [[DateValue]] internal slot is the time value represented by this Date.
就是这样。
给定日期包含的所有信息都在 [[DateValue]]
内部插槽中,不会通过 JavaScript 直接公开 - 它只能通过 Date.prototype
上的方法访问和操作,日期实例继承自的对象。
I can get the value of the date as a string just by accessing it
之所以可行,是因为您将调用 原型 上存在的 toString
方法。例如:
const proto = {
toString() {
return 'foo';
}
};
const instance = Object.create(proto);
console.log(instance.toString());
console.log(Object.getOwnPropertyDescriptors(instance));
对象可以 toString
调用它而无需直接在实例上具有任何属性。