私は、コンストラクタ内のプロパティの1つとしてメソッドを使用する必要がある関数コンストラクタを持っています。私はいつもこれが機能してこれを行う方法であるだろうと教えられてきたコンストラクタの外側でプロトタイプを作成したときに関数が正しく返されますが、コンストラクタ内でメソッドとして使用されていないときは、関数が返されるのはなぜですか?
var currentDate = new formatDate(new Date());
console.log(currentDate.year, currentDate.month, currentDate.dayOfMonth, currentDate.dayOfWeek, currentDate.second);
function formatDate(dateHolder){
this.monthsArray = ["Jan", "Feb", "Mar", "Apr", "May", "June", "July", "Aug", "Sep", "Oct", "Nov", "Dec"];
this.daysOfWeekArray = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"];
this.date = new Date(dateHolder);
this.year = this.date.getFullYear();
this.month = this.monthsArray[this.date.getMonth()];
this.dayOfMonth = this.addZero(this.date.getDate());
this.dayOfWeek = this.daysOfWeekArray[this.date.getDay()];
this.minute = this.addZero(this.date.getMinutes());
this.second = this.addZero(this.date.getSeconds());
this.addZero = function(i){
if(i < 10){
i = "0" +i;
}
return i;
}
}
:通常、私は単純にそうようなプロパティとして関数を作成したいです。しかし、アプリケーションを実行するたびに、this.addZero
が関数ではないというエラーが表示されます。私は同じことを行うが、それはそれはになっていますように動作しますので、
formatDate.prototype.addZero = function(i){
if(i < 10){
i = "0" +i;
}
return i;
}
function formatDate(dateHolder){
this.monthsArray = ["Jan", "Feb", "Mar", "Apr", "May", "June", "July", "Aug", "Sep", "Oct", "Nov", "Dec"];
this.daysOfWeekArray = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"];
this.date = new Date(dateHolder);
this.year = this.date.getFullYear();
this.month = this.monthsArray[this.date.getMonth()];
this.dayOfMonth = this.addZero(this.date.getDate());
this.dayOfWeek = this.daysOfWeekArray[this.date.getDay()];
this.minute = this.addZero(this.date.getMinutes());
this.second = this.addZero(this.date.getSeconds());
}
ようaddZero
メソッドのプロトタイプを作成する場合。
誰かが私が何か間違ったこと(そしてそれを修正する方法)を行っていて、それが正しい方法であるとしたら、それは片方向ではなく他者ではない理由を説明できますか?
プロトタイプのバージョンを使用する方が良い方法ですか? –
@Robertはい、その機能のためです。 – Paulpro
持ち上げに何か利点や不利な点がありますか? –