トップ «前の日記(2005-10-17) 最新 次の日記(2005-10-20)» 編集

活動日誌


2005-10-19

[JavaScript] var で定義した変数の基準オブジェクトは何なのか

前回の続き。

仕様書の和訳を見ながらしばらく悩んでいた。

function C(){ this.str = 'C' }
function D(){ this.str = 'D' }

C.prototype.f = function(){ alert(this.str) }
D.prototype.f = function(){ alert(this.str) }

D.prototype.foo = function(){
    var c = new C();
    c.f();
    var bar = c.f;
    bar();
    this.hoge = c.f;
    this.hoge();
}

var str = 'global';
var d = new D();
d.foo();

11.2.3 関数呼出し によると

something()

という関数呼出しにおいては、this は GetBase(something) になる(GetBase は本当の関数ではなく、仕様の説明上の表記。 8.7 Reference 型 のところに書いてある)。 c.f() の場合は GetBase(c.f) は c だし、this.hoge() の場合は GetBase(this.hoge) は this (つまり d) になる。 だから、c.f() のときは 'C' が出るし、this.hoge() のときは 'D' が出る。

よく分からないのは、bar() に 'global' になること。

var で変数を定義したときにそれの GetBase が何になるかが仕様書を読んでも分からない。


2005|02|03|04|05|06|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|03|04|05|06|10|
2008|04|10|
2009|10|
2010|05|08|
2012|01|02|03|
2014|01|
トップ «前の日記(2005-10-17) 最新 次の日記(2005-10-20)»