だいたいあってる

最近記憶力がやばいのでメモ代わり

JavaScriptのプロトタイプチェインについて

http://www.slideshare.net/yuka2py/javascript-23768378 を見た感想。

JavaScripのプロトタイプチェインって他のオブジェクト指向言語(JavaC++)における継承だと思ってたけど、thisの参照が全く違うみたい。

http://www.slideshare.net/yuka2py/javascript-23768378/40

var objA = {
    name : 'Yome';
    say : function () {
        alert('I LOVE ' + this.name);
    }
};

var objB = { name : 'Nicole' };
objB.__proto__ = objA;

var objC = { };
objC.__proto__ = objB;

objC.say();

では"I LOVE Nicole"と表示されるらしい。

一方Javaだと

class A {
    public String name = "Yome";
    public void say() {
        System.out.println("I LOVE " + this.name);
    }
}

class B extends A {
    public String name = "Nicole";
}

public class C extends B { }

public class Test {
    public static void main(String[] args) {
        C x = new C();
        x.say();
    }
}

実行結果は"I LOVE YOME"となる。

スライドでは「継承」とは表現されていないがプロトタイプチェーンをオブジェクト指向の継承として説明しているサイトはいくつかある。 JavaScriptオブジェクト指向するときはその辺の思考回路を他の言語から切り替えないと泥沼にハマりそう・・・