読者です 読者をやめる 読者になる 読者になる

prototype でつけた関数をファーストクラスで使うと this がしぬ

Program JavaScript

はまりかけた。
コンストラクタで設定すればおk。

function Hoge() {
    var me = this;
    me.print1 = function() {
        console.log(me);
    };  
}
Hoge.prototype.print2 = function() {
    console.log(this);
}
var hoge = new Hoge();
hoge.print1(); // Hoge {print1: function, print2: function}
hoge.print2(); // Hoge {print1: function, print2: function}

var apply = function(f) {
    f();
};
apply(hoge.print1); // Hoge {print1: function, print2: function}
apply(hoge.print2); // undefined


昔々にこれではまっていたようだ。