固定長引数付きcall()メソッドでコンストラクタを継承

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

個数が決まっていない引数(可変長引数)を引き渡す場合は、apply()メソッドを使う。

構文

function コンストラクタA ( 仮引数C1, 仮引数C2, 仮引数C3, … 仮引数CN ) // コンストラクタを定義
{
    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, 実引数C1, 実引数C2, 実引数C3, … 実引数CN ); // コンストラクタを継承
}
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 ( $arg1, $arg2 ) // コンストラクタを定義
{
    this.$attendanceNumber = $arg1; // プロパティを定義
    this.$attendanceNumberWrite = function () { // メソッドを定義
        document.write( '出席番号:' + this.$attendanceNumber + '<br />' );
    }
    this.$name = $arg2; // プロパティを定義
    this.$nameWrite = function () { // メソッドを定義
        document.write( '名前:' + this.$name + '<br />' );
    }
}
function Sansuu ( $arg1, $arg2, $arg3, $arg4 ) // コンストラクタを定義
{
    PersonalData.call( this, $arg1, $arg2 );
    this.$keisan = $arg3; // プロパティを定義
    this.$keisanWrite = function () { // メソッドを定義
        document.write( '計算:' + this.$keisan + '点<br />' );
    }
    this.$bunshoudai = $arg4; // プロパティを定義
    this.$bunshoudaiWrite = function () { // メソッドを定義
        document.write( '図形:' + this.$bunshoudai + '点<br />' );
    }
}
function Kokugo ( $arg1, $arg2, $arg3, $arg4, $arg5 ) // コンストラクタを定義
{
    PersonalData.call( this, $arg1, $arg2 );
    this.$hiragana = $arg3; // プロパティを定義
    this.$hiraganaWrite = function () { // メソッドを定義
        document.write( 'ひらがな:' + this.$hiragana + '点<br />' );
    }
    this.$katakana = $arg4; // プロパティを定義
    this.$katakanaWrite = function () { // メソッドを定義
        document.write( 'カタカナ:' + this.$katakana + '点<br />' );
    }
    this.$kanji = $arg5; // プロパティを定義
    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.$hiraganaWrite();
$Kokugo.$katakanaWrite();
$Kokugo.$kanjiWrite();
</script>

↓↓↓出力結果↓↓↓

スポンサード リンク

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