コンストラクタの継承

関数オブジェクトの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を呼び出す

サンプル

<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>

↓↓↓出力結果↓↓↓

スポンサード リンク

カテゴリー: JavaScript, ユーザー定義オブジェクト, リファレンス パーマリンク