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

メソッドがなければprototypeをさかのぼる

ハタさんのブログ(復刻版) : javascriptを初めて学ぶ人についてのおさらい。その2を見ながら学習

var Echo = {
    hello: function (){
        return 'hello';
    }
};

var Hoge = function (){};
Hoge.prototype = Echo;

var hoge = new Hoge;
alert(hoge.hello()); // hello

Echo.world = function (){
    return 'world';
};

alert(hoge.world()); // world

これはEchoがオブジェクトで(newしていなくて)、hogeがメソッド「world」を探そうとした時に
自分にないからHogeにさかのぼり、さらにHogeにないからそのprototypeのEchoまでさかのぼるから見つかるのかな?

var Echo = function (){};
Echo.prototype = {
    hello: function (){
        return 'hello2';
    }
};

var Hoge = function (){};
Hoge.prototype = new Echo;

var hoge = new Hoge;
alert(hoge.hello()); // hello2

Echo.world = function (){
    return 'worl2';
};
alert(hoge.world); // undefined

Echo.prototype.world = function (){
    return 'world3';
};
alert(hoge.world()); // world3

こっちはEchoをnewしてHoge.prototypeに入れているから、
hogeがworldを見つけるためにHogeまでさかのぼっても、
newした後にEcho自身に追加したworldは見つけることができず、
でもEcho.prototypeに追加したworldはprototypeをさかのぼることで見つけることができるのかな?

あー、newの意味がまたわからなくなってきた。
また後で復習してもうちょいがんばる。