可変長引数付きapply()メソッドでコンストラクタを継承

関数オブジェクトのapply()メソッドは、個数が決まっていない引数(可変長引数)を引き渡しながら、コンストラクタを継承することができる。

決まった個数の引数(固定長引数)を引き渡す場合は、call()メソッドが便利だ。

構文

function コンストラクタA () // コンストラクタを定義
{
    this.プロパティA = 値A; // プロパティを定義
    this.メソッドA = function ( 仮引数A1, 仮引数A2, 仮引数A3, … 仮引数AN ) { // メソッドを定義
        メソッド内処理文;
    }
    コンストラクタA.arguments[0]; // 引数の配列の1つ目の要素にアクセス
    コンストラクタA.arguments[1]; // 引数の配列の2つ目の要素にアクセス
    コンストラクタA.arguments[2]; // 引数の配列の3つ目の要素にアクセス
}
function コンストラクタB () // コンストラクタを定義
{
    this.プロパティB = 値B; // プロパティを定義
    this.メソッドB = function ( 仮引数B1, 仮引数B2, 仮引数B3, … 仮引数BN ) { // メソッドを定義
        メソッド内処理文;
    }
    コンストラクタA.apply( 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 PersonalData () // コンストラクタを定義
{
    if ( PersonalData.arguments[0] ) {
        this.$attendanceNumber = PersonalData.arguments[0]; // プロパティを定義
        this.$attendanceNumberWrite = function () { // メソッドを定義
            document.write( '出席番号:' + this.$attendanceNumber + '<br />' );
        }
    }
    if ( PersonalData.arguments[1] ) {
        this.$name = PersonalData.arguments[1]; // プロパティを定義
        this.$nameWrite = function () { // メソッドを定義
            document.write( '名前:' + this.$name + '<br />' );
        }
    }
    if ( PersonalData.arguments[2] ) {
        this.$sex = PersonalData.arguments[2]; // プロパティを定義
        this.$sexWrite = function () { // メソッドを定義
            document.write( '性別:' + this.$sex + '<br />' );
        }
    }
}
function Sansuu ( $args1, $args2 ) // コンストラクタを定義
{
    PersonalData.apply( this, $args1 );
    this.$keisan = $args2[0]; // プロパティを定義
    this.$keisanWrite = function () { // メソッドを定義
        document.write( '計算:' + this.$keisan + '点<br />' );
    }
    this.$bunshoudai = $args2[1]; // プロパティを定義
    this.$bunshoudaiWrite = function () { // メソッドを定義
        document.write( '図形:' + this.$bunshoudai + '点<br />' );
    }
}
function Kokugo ( $args1, $args2 ) // コンストラクタを定義
{
    PersonalData.apply( this, $args1 );
    this.$hiragana = $args2[0]; // プロパティを定義
    this.$hiraganaWrite = function () { // メソッドを定義
        document.write( 'ひらがな:' + this.$hiragana + '点<br />' );
    }
    this.$katakana = $args2[1]; // プロパティを定義
    this.$katakanaWrite = function () { // メソッドを定義
        document.write( 'カタカナ:' + this.$katakana + '点<br />' );
    }
    this.$kanji = $args2[2]; // プロパティを定義
    this.$kanjiWrite = function () { // メソッドを定義
        document.write( '漢字:' + this.$kanji + '点<br />' );
    }
}
document.write( '【算数】<br />' );
var $Sansuu = new Sansuu( [ '13007', '日本太郎' ], [ 100, 78 ] ); // オブジェクトのインスタンスを作成
document.write( '出席番号:' + $Sansuu.$attendanceNumber + '<br />' );
document.write( '名前:' + $Sansuu.$name + '<br />' );
document.write( '計算:' + $Sansuu.$keisan + '点<br />' );
document.write( '図形:' + $Sansuu.$bunshoudai + '点<br />' );
document.write( '【国語】<br />' );
var $Kokugo = new Kokugo( [ '13020', '日本花子', '女' ], [ 95, 61, 82 ] ); // オブジェクトのインスタンスを作成
$Kokugo.$attendanceNumberWrite();
$Kokugo.$nameWrite();
$Kokugo.$sexWrite();
$Kokugo.$hiraganaWrite();
$Kokugo.$katakanaWrite();
$Kokugo.$kanjiWrite();
</script>

↓↓↓出力結果↓↓↓

スポンサード リンク

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