関数オブジェクトのcall()メソッドやapply()メソッドを使うと、コンストラクタを継承することができる。
call()メソッドは、決まった数の引数(固定長引数)を引き渡しながら、コンストラクタを継承することができる。
apply()メソッドは、個数が決まっていない引数(可変長引数)を引き渡しながら、コンストラクタを継承することができる。
構文
function コンストラクタA () // コンストラクタを定義
{
this.プロパティA = 値A; // プロパティを定義
this.メソッドA = function ( 仮引数A1, 仮引数A2, 仮引数A3, … 仮引数AN ) { // メソッドを定義
メソッド内処理文;
}
}
function コンストラクタB () // コンストラクタを定義
{
this.プロパティB = 値B; // プロパティを定義
this.メソッドB = function ( 仮引数B1, 仮引数B2, 仮引数B3, … 仮引数BN ) { // メソッドを定義
メソッド内処理文;
}
コンストラクタA.call( this ); // コンストラクタを継承
}
var オブジェクト名 = new コンストラクタB(); // オブジェクトのインスタンスを作成
オブジェクト名.プロパティA; // プロパティAを呼び出す
オブジェクト名.プロパティB; // プロパティBを呼び出す
オブジェクト名.メソッドA( 実引数A1, 実引数A2, 実引数A3, … 実引数AN ); // メソッドAを呼び出す
オブジェクト名.メソッドB( 実引数B1, 実引数B2, 実引数B3, … 実引数BN ); // メソッドBを呼び出す
{
this.プロパティA = 値A; // プロパティを定義
this.メソッドA = function ( 仮引数A1, 仮引数A2, 仮引数A3, … 仮引数AN ) { // メソッドを定義
メソッド内処理文;
}
}
function コンストラクタB () // コンストラクタを定義
{
this.プロパティB = 値B; // プロパティを定義
this.メソッドB = function ( 仮引数B1, 仮引数B2, 仮引数B3, … 仮引数BN ) { // メソッドを定義
メソッド内処理文;
}
コンストラクタA.call( this ); // コンストラクタを継承
}
var オブジェクト名 = new コンストラクタB(); // オブジェクトのインスタンスを作成
オブジェクト名.プロパティA; // プロパティAを呼び出す
オブジェクト名.プロパティB; // プロパティBを呼び出す
オブジェクト名.メソッドA( 実引数A1, 実引数A2, 実引数A3, … 実引数AN ); // メソッドAを呼び出す
オブジェクト名.メソッドB( 実引数B1, 実引数B2, 実引数B3, … 実引数BN ); // メソッドBを呼び出す
サンプル
<script type="text/javascript">
function TaxRateConstructor() // コンストラクタを定義
{
this.$taxRate = 0.05; // プロパティを定義
this.$taxRate100 = function () { // メソッドを定義
return this.$taxRate * 100;
}
}
function TaxConstructor( $arg ) // コンストラクタを定義
{
TaxRateConstructor.call( this );
this.$priceExcludingTax = $arg; // プロパティを定義
this.$priceIncludingTax = function () { // メソッドを定義
return this.$priceExcludingTax * ( 1 + this.$taxRate );
}
this.$tax = function () { // メソッドを定義
return this.$priceExcludingTax * this.$taxRate;
}
}
var $taxObject = new TaxConstructor( 100 ); // オブジェクトのインスタンスを作成
document.write( '税抜価格:' + $taxObject.$priceExcludingTax + '<br />' );
document.write( '税込価格:' + $taxObject.$priceIncludingTax() + '円<br />' );
document.write( '税額:' + $taxObject.$tax() + '円<br />' );
document.write( '税率:' + $taxObject.$taxRate100() + '%<br />' );
</script>
function TaxRateConstructor() // コンストラクタを定義
{
this.$taxRate = 0.05; // プロパティを定義
this.$taxRate100 = function () { // メソッドを定義
return this.$taxRate * 100;
}
}
function TaxConstructor( $arg ) // コンストラクタを定義
{
TaxRateConstructor.call( this );
this.$priceExcludingTax = $arg; // プロパティを定義
this.$priceIncludingTax = function () { // メソッドを定義
return this.$priceExcludingTax * ( 1 + this.$taxRate );
}
this.$tax = function () { // メソッドを定義
return this.$priceExcludingTax * this.$taxRate;
}
}
var $taxObject = new TaxConstructor( 100 ); // オブジェクトのインスタンスを作成
document.write( '税抜価格:' + $taxObject.$priceExcludingTax + '<br />' );
document.write( '税込価格:' + $taxObject.$priceIncludingTax() + '円<br />' );
document.write( '税額:' + $taxObject.$tax() + '円<br />' );
document.write( '税率:' + $taxObject.$taxRate100() + '%<br />' );
</script>
↓↓↓出力結果↓↓↓