callメソッドのテスト
call, applyメソッドの意味がやっとわかった。
// nameプロパティを持つオブジェクトのコンストラクタ var Human = function(name){ this.name = name; }; // オブジェクトの作成 var ken = new Human('ken'); var yamada = new Human('yamada'); // 関数オブジェクトの作成 var showName = function(){ alert(this.name); }; // ken, yamadaコンテキスト内でshowName関数を呼び出す // つまり、ken, yamadaオブジェクトがshowNameメソッドを // あたかも所有しているようにshowNameメソッドを呼び出す。 showName.call(ken); // "ken"と表示される showName.call(yamada); // "yamada"と表示される
別のコンストラクタを使用して、追加機能を付与することもできる。
// 別のコンストラクタ var Cons = function(){ this.showName = function(){ alert(this.name); }; }; // showNameメソッドを付与 // Consコンストラクタ内のthisがkenに当たる。 Cons.call(ken); // 付与されているので"ken"と表示される。 ken.showName(); // 付与されていないのでエラー yamada.showName();