Reputation: 1613
So I started working with TypeScript recently and I'm enjoying it so far, but there is a problem that I simply can't understand why it's not working properly.
the "var" keyword is still accessible in TypeScript naturally and I know that it's a function scope, versus block scope for the "let" keyword. I have the following code and I can't figure out why it's not working:
class Calendar {
month: number;
months: string[];
weekday: number;
day: number;
constructor() {
this.month = date.getMonth();
this.months = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'November', 'December'];
this.weekday = date.getDay();
this.day = date.getDate();
}
nextMonth() {
var months = this.months;
var currentmonth: number = this.month;
el('.icono-caretRight').addEventListener('click', () => {
currentmonth = (currentmonth + 1) % months.length;
}, false);
month = currentmonth;
return month;
}
previousMonth() {
el('.icono-caretLeft').addEventListener('click', () => {
month--;
}, false);
}
}
let calendar = new Calendar();
let month = calendar.month;
let nextmonth = calendar.nextMonth();
console.log(nextmonth);
Look at the nextMonth() function. I don't know why the "month" variable is not being incremented. What exactly am I doing wrong here?
Note: I'm using JSPM + TypeScript (the plugin-typescript).
Thanks in advance!
Upvotes: 1
Views: 151
Reputation: 276239
the "var" keyword is still accessible in TypeScript naturally and I know that it's a function scope, versus block scope for the "let" keyword. I have the following code and I can't figure out why it's not working:
Your understanding of scoping
is correct.
The following code does work:
class Calendar {
month: number = 0;
months: string[];
constructor() {
this.months = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'November', 'December'];
}
nextMonth() {
var months = this.months;
var currentmonth: number = this.month;
currentmonth = (currentmonth + 1) % months.length;
month = currentmonth;
return month;
}
}
let calendar = new Calendar();
let month = calendar.month; // 0
let nextmonth = calendar.nextMonth();
console.log(nextmonth); // 1
I suspect you are confused about month
vs. this.month
AND / OR addEventListener
vs. actually calling the function.
Based on the user comment:
I understand that the this.month is 0 since well the date.getMonth() is actually 0. My problem in that is doesn't want to increment, probably I don't get the addEventListener part of the function or maybe like you said I'm confused, because it's suppose to increment on click correct? It has to return a new value everytime the user clicks right? Or... Not sure anymore though
The code
el('.icono-caretRight').addEventListener('click', () => {
currentmonth = (currentmonth + 1) % months.length;
}, false);
Is probably something you want to do in the constructor. And most likely you want :
el('.icono-caretRight').addEventListener('click', () => {
this.nextMonth();
}, false);
Upvotes: 1