///<reference path='jquery.d.ts' />
class Mate {
    public n : number;
    public name : string = "Freddie";
    public nick : string = "Fred";
    public message() : void {
        var people = new Array<Person>();
        {
            var p = new Person();
            p.name = "Ely";
            people.push(p);
        }
        {
            var p = new Person();
            p.name = "Raymund";
            people.push(p);
        }
        $.each(people, function() {
            alert('inline: ' + this.name + ' -- ' + this.nick);
        });
        /*
        Outputs:
        inline: Ely -- undefined
        inline: Raymund -- undefined
        */
        $.each(people, this.alerter);
        /*
        Coming from traditional OOP, I expected:
        Freddie -- Fred
        Freddie -- Fred
        What happens:
        Ely -- undefined
        Raymund -- undefined
        */
        $.each(people, () => alert('inline: ' + this.name + ' -- ' + this.nick) );
        /*
        Outputs:
        inline: Freddie -- Fred
        inline: Freddie -- Fred
        */
        $.each(people, () => this.alerter());
        /*
        Outputs:
        Freddie -- Fred
        Freddie -- Fred
        */
    }
    public alerter() : void {
        alert(this.name + ' -- ' + this.nick);
    }
}
class Person {
    public name : string;
}
$(function() {
    var m = new Mate();
    m.message();
});
Thursday, July 24, 2014
On TypeScript, the this keyword doesn't always reference the instance of a class
Subscribe to:
Comments (Atom)
