прототип javascript и доступ "this" в закрытии

Я новичок в js, и меня озадачил следующий код:

Foo = function(arg) {
    this.arg = arg;
};

Foo.prototype = {
    init: function () {
        var f = function () {
            alert("current arg: " + this.arg); // am expecting "bar", got undefined
        }
        f();
    }
};

var yo = Foo("bar");
yo.init();

Я ожидал получить "current arg: bar", но получил "current arg: undefined". Я заметил, что, сначала скопировав this.arg в "нормальную" переменную и указав эту переменную в закрытии, работает:

Foo.prototype = {
    init: function () {
        var yo = this.arg;
        var f = function () {
            alert("current arg: " + yo);            }
        f();
    }
};

Я что-то делаю не так, получил неверные ожидания, или он попадает в один из js WTF?

5
задан David Cournapeau 12 November 2010 в 05:39
поделиться