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...
意外结果:
- 生日会员未定义class
- 未定义我添加到 Date.prototype
的函数
此代码曾经有效。如您所见,如果我在构造函数中实例化 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()
因为它不是一个函数属性
我正在尝试将 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...
意外结果:
- 生日会员未定义class
- 未定义我添加到 Date.prototype 的函数
此代码曾经有效。如您所见,如果我在构造函数中实例化 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()
因为它不是一个函数属性