【发布时间】:2019-01-30 19:13:34
【问题描述】:
如果我想破坏一个对象,我会这样做:
const obj = {
a: 'a',
fn: () => 'some function'
}
// const fn = obj.fn;
// OR
const {
a,
fn
} = obj;
console.log( fn() );
这不适用于Date 对象:
未捕获的 TypeError:这不是 Date 对象。
const date = new Date();
const day = date.getDate();
console.log(day); // works
const {
getDate
} = date;
console.log( getDate() ); // doesn't work
为什么使用第一个 Object 而不是 Date ?如果可能,人们将如何实现这一目标。
【问题讨论】:
-
解构只是
name = obj.name的简写,在这两种情况下,您都会丢失obj的this上下文。因此,这不仅限于日期,任何 obj 都会丢失this。 -
这两个日期示例不等价。你的解构是这样的:
const getDate = date.getDate; getDate()如果没有date对象是thisstackoverflow.com/a/2025839,这毫无意义 -
来自ECMA-262:设 t 为 LocalTime(?thisTimeValue(this value))。。调用解构后的getDate时,this是什么?您可以使用
getDate.call(date)修复它。 ;-) -
@RobG 您评论中的问题有助于理解正在发生的事情,现在很有意义,当我解构函数时,我松散了 this,谢谢 :)
标签: javascript date methods this destructuring