Mac 自动化脚本 - 将对象作为值传递

Mac Automation Scripting - Pass an object as a value

我正在尝试将 Date 对象作为值传递给 Javascript 用于 Mac 自动化脚本的构造函数。这是我尝试 运行:

的代码
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...

意外结果:

  1. 生日会员未定义class
  2. 未定义我添加到 Date.prototype
  3. 的函数

此代码曾经有效。如您所见,如果我在构造函数中实例化 Date,它就可以工作。所以,我可以如下更改 Birthday class 的构造函数:

class Birthday {
  constructor(name, year, month, day) {
    this.name = name;
    this.date = new Date(year, month, day);
  }
}

但是,我有这么多行的 Birthday 实例化,我很好奇为什么这段代码不再起作用了。

如果您对此事有任何了解,请告诉我。提前谢谢你。

您正在传递 Date.now() into the constructor. Date.now returns and 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)));

连同 bmceldowney 所说的一样,您没有传入 date 对象,当您调用它时 month 应该是 month() 因为它不是一个函数属性