いろきゅう.jp 〜Programmable maiden〜 Tech side このページをアンテナに追加 RSSフィード

2016-10-20

pythonおじさん、JavaScriptの "this" で無事死亡

| 17:17

// jquery ロード済みとする

var CRozen = (function()
{
    var ctor = function(msg)
    {
        this.msg = msg;
    };
    
    var p = ctor.prototype;
    p.echo = function()
    {
        alert(this.msg);
    };
    
    return ctor;
})();

var kana = new CRozen("kashira!!");
$(kana.echo);   // onload 時にコールバック!

http://ir9.jp/hd16/1020_00.png

undefined …だと……?



thisがなんかおかしい…という事は、原因は $() の中身だろうということでちょっと書き換えた所、期待通りの動作に。

// jquery ロード済みとする

var CRozen = (function()
{
    var ctor = function(msg)
    {
        this.msg = msg;
    };
    
    var p = ctor.prototype;
    p.echo = function()
    {
        alert(this.msg);
    };
    
    return ctor;
})();

var kana = new CRozen("kashira!!");
$(function(){ kana.echo(); });   // onload 時にコールバック!

http://ir9.jp/hd16/1020_01.png

うむ。

JavaScript関数オブジェクトは、this を自動で紐付けてくれないものなんですねぇおのれ…!!



python文化のおじさんなので、this(ってか self)を自動で引っ張ってくれるイメージがデフォだったんじゃ…!

class CRozen :
    def __init__(self, msg) :
        self.msg = msg
    
    def echo(self) :
        print(self.msg)

kana = CRozen("kashira!!")
fn   = kana.echo
fn()    # kashira!!
トラックバック - http://d.hatena.ne.jp/ir9Ex/20161020/1476951455