apply/call での継承の話

この件について。

継承というかスコープがわかりやすいというのもメリットだと思うけど、カプセル化しやすいのも大きなメリットかなと思う。

function Foo(){}
(function(){
  var bar = 'bar';
  this.bar = bar.toUpperCase();
  function baz () {
    console.log('baz');
  }
  this.baz = function() {
    baz();
    console.log('BAZ');
  }
}).call(Foo.prototype);

function Bar(){}
Bar.prototype = new Foo();
(function() {
  this.hoge = 'hoge';
  this.baz = function() {
    Foo.prototype.baz.call(this);
    baz(); // 実行時に ReferenceError
    console.log('Bar::baz');
  }
  this.bar = bar; // 評価時に ReferenceError
}).call(Bar.prototype);