我正在尝试将Date对象作为值传递给Mac Automation Scripting的Javascript构造函数。这是我试图运行的代码:
app = Application.currentApplication();
app.includeStandardAdditions = true;
app.strictPropertyScope = true;
Date.prototype.month = function () {
return this.getMonth();
};
class Birthday {
constructor(name, date) {
this.name = name;
this.date = date;
this.mydate = new Date(2018, 0, 5);
}
}
var birthdays = [];
birthdays.push(new Birthday('John Doe1'), Date.now(2018, 0, 1));
// birthdays.push(new Birthday("John Doe2"), Date.now(2018, 0, 2));
// birthdays.push(new Birthday("John Doe3"), Date.now(2018, 0, 3));
// continued ...
console.log(birthdays[0].name); // John Doe1
console.log(birthdays[0].date); // undefined (*1)
console.log(birthdays[0].month); // undefined (*2)
console.log(birthdays[0].mydate); // Fri Jan 05 2018 00:00:00 GMT...
意外结果:
此代码用于工作。正如您所看到的,如果我在构造函数中实例化Date,它将起作用。所以,我可以按如下方式更改Birthday类的构造函数:
class Birthday {
constructor(name, year, month, day) {
this.name = name;
this.date = new Date(year, month, day);
}
}
但是,我有很多生日实例,我很好奇为什么这段代码不再有效。
如果您对此事有任何了解,请告诉我。提前谢谢。
答案 0 :(得分:0)
您将Date.now()
的结果传递给构造函数。 Date.now
会返回Number
,而不是Date
个对象。
您可能需要以下内容:
birthdays.push(new Birthday('John Doe1', new Date(2018, 0, 1)));
代替。
修改强>
我刚刚注意到语法错误。你过早关闭你的parens,所以在你的代码中你永远不会将Date.now()
结果作为构造函数参数传递,你将它作为第二个参数传递给birthdays.push()
。你想要改变:
birthdays.push(new Birthday('John Doe1'), Date.now(2018, 0, 1));
到
birthdays.push(new Birthday('John Doe1', new Date(2018, 0, 1)));
答案 1 :(得分:0)
以及bmceldowney
所说的内容,当你调用它时,你并没有传递date
个对象而month
应该是month()
cus它是一个函数而不是属性