UTF-8に単純変換

This commit is contained in:
Takenori Imoto
2016-09-08 17:35:30 +09:00
parent 8713024d66
commit 0532684298
641 changed files with 22561 additions and 21149 deletions

View File

@@ -5,27 +5,27 @@
<!-- generated by to_html.pl from class.xml -->
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS" />
<title>�N���X</title>
<title>クラス</title>
<meta name="author" content="W.Dee" />
<meta http-equiv="Content-Style-Type" content="text/css" />
<meta http-equiv="Content-Script-Type" content="text/javascript" />
<link href="browser.css" type="text/css" rel="stylesheet" title="�g���g���֘A���t�@�����X�p�W���X�^�C��" />
<link href="browser.css" type="text/css" rel="stylesheet" title="吉里吉里関連リファレンス用標準スタイル" />
<link href="mailto:[email protected]" rev="Made" />
<link href="index.html" target="_top" rel="Start" title="�g�b�v�y�[�W" />
<link href="index.html" target="_top" rel="Start" title="トップページ" />
</head>
<body>
<h1><a id="id47" name="id47">�N���X</a>
<h1><a id="id47" name="id47">クラス</a>
</h1><div class="para"><div>
�@�N���X�́A�I�u�W�F�N�g���쐬�����Ƃ��̐��`�ƂȂ����̂ł��B�N���X�ɑ������ϐ��������o�ϐ��A�N���X�ɑ������֐��������o�֐��A���邢�̓��\�b�h�ƌĂсA�N���X�ɑ������v���p�e�B�̓����o�v���p�e�B�ƌĂт܂��B<br />
 クラスは、オブジェクトを作成するときの雛形となるものです。クラスに属する変数をメンバ変数、クラスに属する関数をメンバ関数、あるいはメソッドと呼び、クラスに属するプロパティはメンバプロパティと呼びます。<br />
<br />
�@�N���X�͊��{�I�ɂ͈ȉ��̂悤�ɂ��Đ錾���܂��B<br />
 クラスは基本的には以下のようにして宣言します。<br />
<br />
<code class="bq"><a id="id48" name="id48" class="targanchor"><dfn>class</dfn></a>&nbsp;classname<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;<span class="comment">//&nbsp;�����o�⃁���o���\�b�h�⃁���o�v���p�e�B���L�q</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;<span class="comment">//&nbsp;メンバやメンバメソッドやメンバプロパティを記述</span><br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;function&nbsp;classname()&nbsp;<span class="comment">//&nbsp;�R���X�g���N�^</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;function&nbsp;classname()&nbsp;<span class="comment">//&nbsp;コンストラクタ</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
@@ -38,40 +38,40 @@
<br />
<br />
�@�N���X���ɂ͎��ʎq���w�肵�܂��B<br />
 クラス名には識別子を指定します。<br />
<br />
�@�N���X���ɂ́A���̃N���X���쐬���ꂽ�Ƃ��Ƀ����o�ƂȂ��ϐ��⃁�\�b�h�A�v���p�e�B���L�q���܂��B<br />
 クラス内には、そのクラスが作成されたときにメンバとなる変数やメソッド、プロパティを記述します。<br />
<br />
�@�N���X���ɂ́A�N���X�Ɠ����̃��\�b�h���K�����‚����A<a id="id50" name="id50" class="targanchor"><dfn>�R���X�g���N�^</dfn></a>�ƌĂ΂��܂��B�����́A <a id="id51" name="id51" class="targanchor"><dfn>new</dfn></a> ���Z�q���g�p���ăI�u�W�F�N�g���쐬�����Ƃ��A���̊֐��� new ���Z�q�̈����𔺂��ČĂяo�����܂��B<br />
 クラス内には、クラスと同名のメソッドが必ず一つあり、<a id="id50" name="id50" class="targanchor"><dfn>コンストラクタ</dfn></a>と呼ばれます。これは、 <a id="id51" name="id51" class="targanchor"><dfn>new</dfn></a> 演算子を使用してオブジェクトを作成するとき、この関数が new 演算子の引数を伴って呼び出されます。<br />
<br />
�@�N���X���ɂ͓��l�ɁAfinalize �Ƃ��������ȃ��\�b�h�������܂��B�����́A�I�u�W�F�N�g�����ł����Ƃ��ɌĂ΂��郁�\�b�h�ŁA�ȗ��”\�ł��B�����Ȃ��Ă����܂��܂����B<br />
 クラス内には同様に、finalize という特殊なメソッドがあります。これは、オブジェクトが消滅するときに呼ばれるメソッドで、省略可能です。書かなくてもかまいません。<br />
<br />
<br />
<code class="bq"><span class="weak">��:</span><br />&nbsp;&nbsp;&nbsp;&nbsp;class&nbsp;test<br />
<code class="bq"><span class="weak">:</span><br />&nbsp;&nbsp;&nbsp;&nbsp;class&nbsp;test<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;function&nbsp;test()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="comment">//&nbsp;�R���X�g���N�^</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="comment">//&nbsp;�����ɁA�I�u�W�F�N�g���쐬�������Ƃ��ɏ����������e������</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="comment">//&nbsp;コンストラクタ</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="comment">//&nbsp;ここに、オブジェクトが作成されるときに処理する内容を書く</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;variable&nbsp;=&nbsp;0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;function&nbsp;finalize()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="comment">//&nbsp;finalize&nbsp;���\�b�h</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="comment">//&nbsp;�����ɁA�I�u�W�F�N�g���j���������Ƃ��ɏ����������e������</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="comment">//&nbsp;finalize&nbsp;メソッド</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="comment">//&nbsp;ここに、オブジェクトが破棄されるときに処理する内容を書く</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;function&nbsp;method1()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="comment">//&nbsp;���\�b�h</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="comment">//&nbsp;メソッド</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.inform(variable);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;variable;&nbsp;<span class="comment">//&nbsp;�����o�ϐ�</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;variable;&nbsp;<span class="comment">//&nbsp;メンバ変数</span><br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;property&nbsp;prop&nbsp;<span class="comment">//&nbsp;�����o�v���p�e�B</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;property&nbsp;prop&nbsp;<span class="comment">//&nbsp;メンバプロパティ</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;getter()&nbsp;{&nbsp;return&nbsp;variable;&nbsp;}&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
@@ -80,161 +80,161 @@
<br />
<br />
�N���X�ɑ΂��� instanceof ���Z�q�� &quot;Class&quot; �𔺂��Ďg�p�����ꍇ�͐^�ɂȂ��܂�(���L�̗��Ō����ƁAtest instanceof &quot;Class&quot; �͐^)�B<br />
クラスに対して instanceof 演算子を &quot;Class&quot; を伴って使用した場合は真になります(上記の例で言うと、test instanceof &quot;Class&quot; は真)。<br />
</div></div>
<h1><a id="id52" name="id52">�I�u�W�F�N�g�̍쐬</a>
<h1><a id="id52" name="id52">オブジェクトの作成</a>
</h1><div class="para"><div>
�@�錾�����N���X�̃I�u�W�F�N�g���쐬�����ɂ� new ���Z�q���g���܂��B<br />
�@new ���Z�q�̌��ɂ́A�֐��Ăяo���Ɠ��l�ɁA�N���X���ƁA�R���X�g���N�^�ɓn���������w�肵�܂��B<br />
 宣言したクラスのオブジェクトを作成するには new 演算子を使います。<br />
 new 演算子の後には、関数呼び出しと同様に、クラス名と、コンストラクタに渡す引数を指定します。<br />
<br />
<code class="bq"><span class="weak">��:</span><br />&nbsp;&nbsp;&nbsp;&nbsp;class&nbsp;Test<br />
<code class="bq"><span class="weak">:</span><br />&nbsp;&nbsp;&nbsp;&nbsp;class&nbsp;Test<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;variable1&nbsp;=&nbsp;getValue();&nbsp;<span class="comment">//&nbsp;�����o�ϐ��̏�����</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;variable1&nbsp;=&nbsp;getValue();&nbsp;<span class="comment">//&nbsp;メンバ変数の初期化</span><br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;function&nbsp;Test(arg1,&nbsp;arg2)&nbsp;<span class="comment">//&nbsp;�R���X�g���N�^</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;function&nbsp;Test(arg1,&nbsp;arg2)&nbsp;<span class="comment">//&nbsp;コンストラクタ</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="comment">//&nbsp;�����ł�&nbsp;new&nbsp;���Z�q�Ŏw�肵��������&nbsp;arg1&nbsp;��&nbsp;arg2&nbsp;�ɂ킽���Ă���</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="comment">//&nbsp;ここでは&nbsp;new&nbsp;演算子で指定した引数が&nbsp;arg1&nbsp;&nbsp;arg2&nbsp;にわたっている</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;newobject&nbsp;=&nbsp;new&nbsp;Test(1,&nbsp;2);&nbsp;<span class="comment">//&nbsp;������&nbsp;1,&nbsp;2&nbsp;���n����&nbsp;test&nbsp;�N���X�̃I�u�W�F�N�g���쐬</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;newobject&nbsp;=&nbsp;new&nbsp;Test(1,&nbsp;2);&nbsp;<span class="comment">//&nbsp;引数に&nbsp;1,&nbsp;2&nbsp;を渡して&nbsp;test&nbsp;クラスのオブジェクトを作成</span><br />
</code>
<br />
<br />
�@�N���X���쐬�������Ƃ��̏����̏��Ԃ͈ȉ��̒ʂ��ł��B<br />
 クラスが作成されるときの処理の順番は以下の通りです。<br />
<br />
<ol><li>�܂����̃I�u�W�F�N�g���쐬������</li><li>���\�b�h�A�v���p�e�B���o�^������</li><li>�����o�ϐ����쐬������ ( ���̂Ƃ����������K�v�ȕϐ��͏����������� )</li><li>�R���X�g���N�^�����s������</li></ol><br /><div class="note"><div class="notehead"><span class="noteheadspan">Note</span></div>
�@�R���X�g���N�^�ւ̈������Ȃ��ꍇ�ł����Ă��Anew ���Z�q�� ( ) ���ȗ����邱�Ƃ͂ł��܂����B JavaScript �̂悤�� new Test �Ə������Ƃ͂ł��܂����Bnew Test( ) �Ə����K�v�������܂��B<br />
<ol><li>まず空のオブジェクトが作成される</li><li>メソッド、プロパティが登録される</li><li>メンバ変数が作成される ( このとき初期化が必要な変数は初期化される )</li><li>コンストラクタが実行される</li></ol><br /><div class="note"><div class="notehead"><span class="noteheadspan">Note</span></div>
 コンストラクタへの引数がない場合であっても、new 演算子の ( ) を省略することはできません。 JavaScript のように new Test と書くことはできません。new Test( ) と書く必要があります。<br />
</div><br />
<br />
�@���ɁA�N���X�̃��\�b�h���v���p�e�B���ł��̃N���X�̃I�u�W�F�N�g���쐬�����ꍇ�A���邢�͂��̃N���X�̃X�[�p�[�N���X�̃I�u�W�F�N�g���쐬�����ꍇ�A�ȉ��̂悤�ɂ����ƃG���[�ɂȂ��܂��B<br />
 特に、クラスのメソッドやプロパティ内でそのクラスのオブジェクトを作成する場合、あるいはそのクラスのスーパークラスのオブジェクトを作成する場合、以下のようにするとエラーになります。<br />
<br />
<code class="bq"><span class="weak">��:</span><br />&nbsp;&nbsp;&nbsp;&nbsp;class&nbsp;Test<br />
<code class="bq"><span class="weak">:</span><br />&nbsp;&nbsp;&nbsp;&nbsp;class&nbsp;Test<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;function&nbsp;Test()&nbsp;<span class="comment">//&nbsp;�R���X�g���N�^</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;function&nbsp;Test()&nbsp;<span class="comment">//&nbsp;コンストラクタ</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;function&nbsp;func()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;new&nbsp;Test();&nbsp;<span class="comment">//&nbsp;�G���[</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;new&nbsp;Test();&nbsp;<span class="comment">//&nbsp;エラー</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</code>
<br />
<br />
�@�Ȃ��Ȃ��΁A�N���X�̃��\�b�h���v���p�e�B���� Test �ƒP�ɏ����ƁA�N���X�ł��� Test ���������̃R���X�g���N�^�� Test �̕����X�R�[�v�I�ɋ߂����߁A�R���X�g���N�^�� Test �Q�Ƃ����Ă��܂������ł��B���̏ꍇ�͂����������邽�߂ɁA�ȉ��̂悤�ɖ����I�� global. ���g�p�����K�v�������܂� ( �N���X�� global �ɓo�^�����邩���ł� )�B<br />
 なぜならば、クラスのメソッドやプロパティ内で Test と単に書くと、クラスである Test よりもそのコンストラクタの Test の方がスコープ的に近いため、コンストラクタの Test 参照されてしまうからです。この場合はこれを避けるために、以下のように明示的に global. を使用する必要があります ( クラスは global に登録されるからです )。<br />
<br />
<br />
<code class="bq"><span class="weak">��:</span><br />&nbsp;&nbsp;&nbsp;&nbsp;class&nbsp;Test<br />
<code class="bq"><span class="weak">:</span><br />&nbsp;&nbsp;&nbsp;&nbsp;class&nbsp;Test<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;function&nbsp;Test()&nbsp;<span class="comment">//&nbsp;�R���X�g���N�^</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;function&nbsp;Test()&nbsp;<span class="comment">//&nbsp;コンストラクタ</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;function&nbsp;func()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;new&nbsp;global.Test();&nbsp;<span class="comment">//&nbsp;�����Ȃ���&nbsp;OK</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;new&nbsp;global.Test();&nbsp;<span class="comment">//&nbsp;これならば&nbsp;OK</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</code>
<br />
</div></div>
<h1><a id="id53" name="id53">�I�u�W�F�N�g�̖�����</a>
<h1><a id="id53" name="id53">オブジェクトの無効化</a>
</h1><div class="para"><div>
�@TJS2 �ł́A�I�u�W�F�N�g���폜�������ہA�I�u�W�F�N�g��<a id="id54" name="id54" class="targanchor"><dfn>������</dfn></a>�ƃI�u�W�F�N�g�̍폜�A�Ƃ����Q�‚̒i�K�𓥂݂܂��B<br />
�@�I�u�W�F�N�g���������������Ƃ��A finalize ���\�b�h���Ă΂��A���̃I�u�W�F�N�g�͖����ł����Ƃ����}�[�N���‚������܂��B�ȍ~�̂��̃I�u�W�F�N�g�ւ̃A�N�Z�X�͂��ׂĎ��s���A���O�����������悤�ɂȂ��܂��B�I�u�W�F�N�g�������������Ă��邩�ǂ����� <a id="id55" name="id55" class="targanchor"><dfn>isvalid</dfn></a> ���Z�q�Œ��ׂ邱�Ƃ��ł��܂��B<br />
 TJS2 では、オブジェクトが削除される際、オブジェクトの<a id="id54" name="id54" class="targanchor"><dfn>無効化</dfn></a>とオブジェクトの削除、という2つの段階を踏みます。<br />
 オブジェクトが無効化されるとき、 finalize メソッドが呼ばれ、そのオブジェクトは無効であるというマークがつけられます。以降のそのオブジェクトへのアクセスはすべて失敗し、例外が発生するようになります。オブジェクトが無効化されているかどうかは <a id="id55" name="id55" class="targanchor"><dfn>isvalid</dfn></a> 演算子で調べることができます。<br />
<br />
�@�I�u�W�F�N�g�� <a id="id56" name="id56" class="targanchor"><dfn>invalidate</dfn></a> ���Z�q�Ŗ��������邱�Ƃ��ł��܂��B<br />
 オブジェクトは <a id="id56" name="id56" class="targanchor"><dfn>invalidate</dfn></a> 演算子で無効化することができます。<br />
<br />
<br />
<code class="bq"><span class="weak">��:</span><br />&nbsp;&nbsp;&nbsp;&nbsp;class&nbsp;Test<br />
<code class="bq"><span class="weak">:</span><br />&nbsp;&nbsp;&nbsp;&nbsp;class&nbsp;Test<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;variable;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;function&nbsp;Test()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="comment">//&nbsp;�R���X�g���N�^</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="comment">//&nbsp;コンストラクタ</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;variable&nbsp;=&nbsp;new&nbsp;AnotherClass();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;function&nbsp;finalize()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="comment">//&nbsp;finalize&nbsp;���\�b�h�͖��������ꂽ���ɌĂ΂���</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="comment">//&nbsp;finalize&nbsp;メソッドは無効化された時に呼ばれる</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;invalidate&nbsp;variable;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;object&nbsp;=&nbsp;new&nbsp;Test();&nbsp;<span class="comment">//&nbsp;�I�u�W�F�N�g���쐬</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;object&nbsp;=&nbsp;new&nbsp;Test();&nbsp;<span class="comment">//&nbsp;オブジェクトを作成</span><br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;(��)<br />
&nbsp;&nbsp;&nbsp;&nbsp;()<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;invalidate&nbsp;object;&nbsp;<span class="comment">//&nbsp;�I�u�W�F�N�g�𖳌���</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;invalidate&nbsp;object;&nbsp;<span class="comment">//&nbsp;オブジェクトを無効化</span><br />
</code>
<br />
<br />
�@invalidate ���Z�q���p���Ȃ��Ă��A�I�u�W�F�N�g�͕K�v�Ƃ����Ȃ��Ȃ������_�ō폜�����܂��B���̂Ƃ��A�����������Ă��Ȃ����΁A���̎��_�Ŗ����������܂��B<br />
�@TJS2 �ł͂��ƒI�u�W�F�N�g���폜�����邩�̖��m�ȋK�肪�����A�폜�△�����́u���‚ł������肤���v���ƂɂȂ��܂��B���������āA�����������ĂȂ��I�u�W�F�N�g�͍폜���ɖ����������邽�߁A�v���ʎ��_�� finalize ���\�b�h���Ă΂��Ă��܂��”\���������܂��B�����������邽�߂ɂ��A�I�u�W�F�N�g���g���I�������� invalidate ���Z�q�Ŗ��������邱�Ƃ��������߂��܂��B<br />
 invalidate 演算子を用いなくても、オブジェクトは必要とされなくなった時点で削除されます。このとき、無効化されていなければ、その時点で無効化されます。<br />
 TJS2 ではいつオブジェクトが削除されるかの明確な規定が無く、削除や無効化は「いつでもおこりうる」ことになります。したがって、無効化されてないオブジェクトは削除時に無効化されるため、思わぬ時点で finalize メソッドが呼ばれてしまう可能性があります。これを避けるためにも、オブジェクトを使い終わったら invalidate 演算子で無効化することをおすすめします。<br />
<br />
<br /><div class="note"><div class="notehead"><span class="noteheadspan">Note</span></div>
�@invalidate ���Z�q�� C++ �� delete ���Z�q�ɋ߂����������܂��B<br />
�@TJS2 �� delete ���Z�q�� C++ �� delete ���Z�q�ƈႢ�A�����o�⃍�[�J���ϐ����폜���邽�߂̉��Z�q�ł��B�I�u�W�F�N�g���̂𖳌����������폜�������͂��܂��񂪁A�����o�⃍�[�J���ϐ����폜�������Ƃɂ��茋�ʓI�ɃI�u�W�F�N�g�̖��������폜�������N�������Ƃ͂����܂��B<br />
 invalidate 演算子は C++ delete 演算子に近い働きをします。<br />
 TJS2 delete 演算子は C++ delete 演算子と違い、メンバやローカル変数を削除するための演算子です。オブジェクト自体を無効化したり削除したりはしませんが、メンバやローカル変数を削除したことにより結果的にオブジェクトの無効化や削除を引き起こすことはあります。<br />
</div><br />
</div></div>
<h1><a id="id57" name="id57">�I�u�W�F�N�g�ւ̃A�N�Z�X</a>
<h1><a id="id57" name="id57">オブジェクトへのアクセス</a>
</h1><div class="para"><div>
�@�쐬�����I�u�W�F�N�g�̃����o�ϐ��A���\�b�h�A�����o�v���p�e�B�ɂ́A<a id="id58" name="id58" class="targanchor"><dfn>.</dfn></a> (�����o�I��) ���Z�q �܂��� <a id="id59" name="id59" class="targanchor"><dfn>[ ]</dfn></a> (�Ԑڃ����o�I�����Z�q) ���p���ăA�N�Z�X���܂��B<br />
 作成したオブジェクトのメンバ変数、メソッド、メンバプロパティには、<a id="id58" name="id58" class="targanchor"><dfn>.</dfn></a> (メンバ選択) 演算子 または <a id="id59" name="id59" class="targanchor"><dfn>[ ]</dfn></a> (間接メンバ選択演算子) を用いてアクセスします。<br />
<br />
<code class="bq"><span class="weak">��:</span><br />&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;obj=new&nbsp;MyLayer(window,window.prmaryLayer)<br />
&nbsp;&nbsp;&nbsp;&nbsp;obj.method1();&nbsp;<span class="comment">//&nbsp;���\�b�h�̌Ăяo��&nbsp;&nbsp;obj['method1']()&nbsp;�ł�����</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;obj.num&nbsp;=&nbsp;3;&nbsp;<span class="comment">//&nbsp;�����o�ϐ��֑���&nbsp;&nbsp;obj['num']=3&nbsp;�ł�����</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;obj.prop1++;&nbsp;<span class="comment">//&nbsp;�����o�v���p�e�B�ɃA�N�Z�X&nbsp;&nbsp;obj['prop1']++&nbsp;�ł�����</span><br />
<code class="bq"><span class="weak">:</span><br />&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;obj=new&nbsp;MyLayer(window,window.prmaryLayer)<br />
&nbsp;&nbsp;&nbsp;&nbsp;obj.method1();&nbsp;<span class="comment">//&nbsp;メソッドの呼び出し&nbsp;&nbsp;obj['method1']()&nbsp;でも同じ</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;obj.num&nbsp;=&nbsp;3;&nbsp;<span class="comment">//&nbsp;メンバ変数へ代入&nbsp;&nbsp;obj['num']=3&nbsp;でも同じ</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;obj.prop1++;&nbsp;<span class="comment">//&nbsp;メンバプロパティにアクセス&nbsp;&nbsp;obj['prop1']++&nbsp;でも同じ</span><br />
</code>
<br />
</div></div>
<h1><a id="id60" name="id60">�N���[�W��</a>
<h1><a id="id60" name="id60">クロージャ</a>
</h1><div class="para"><div>
�@�쐬�����I�u�W�F�N�g�̃��\�b�h�⃁���o�v���p�e�B�́A���̃����o���ǂ̃I�u�W�F�N�g�̃����o�ł��邩�̏��������������ԂŃI�u�W�F�N�g�ɓo�^�����Ă��܂��B<br />
�@���̂��߁A���\�b�h�⃁���o�v���p�e�B���I�u�W�F�N�g�O�Ɏ����o���āA�������g�p���Ă��A���̃I�u�W�F�N�g�ɑ΂����A�N�Z�X���s�����ƂɂȂ��܂��B���̋@�\���N���[�W���ƌĂт܂��B�܂��A�A�N�Z�X���̃I�u�W�F�N�g��<a id="id61" name="id61" class="targanchor"><dfn>�R���e�L�X�g</dfn></a>�ƌĂт܂��B<br />
 作成したオブジェクトのメソッドやメンバプロパティは、そのメンバがどのオブジェクトのメンバであるかの情報を持った状態でオブジェクトに登録されています。<br />
 そのため、メソッドやメンバプロパティをオブジェクト外に持ち出して、それを使用しても、元のオブジェクトに対するアクセスを行うことになります。この機能をクロージャと呼びます。また、アクセス先のオブジェクトを<a id="id61" name="id61" class="targanchor"><dfn>コンテキスト</dfn></a>と呼びます。<br />
<br />
<code class="bq"><span class="weak">��:</span><br />&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;obj&nbsp;=&nbsp;new&nbsp;FooBarClass();&nbsp;<span class="comment">//&nbsp;�I�u�W�F�N�g���쐬</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;obj.method();&nbsp;<span class="comment">//&nbsp;�I�u�W�F�N�g�̃��\�b�h�𕁒ʂɌĂяo��</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;objmethod&nbsp;=&nbsp;obj.method;&nbsp;<span class="comment">//&nbsp;�I�u�W�F�N�g�̃��\�b�h�ւ̎Q�Ƃ�&nbsp;objmethod&nbsp;�ɑ���</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;objmethod();&nbsp;<span class="comment">//&nbsp;objmethod&nbsp;���Ăяo�����Aobj.method()&nbsp;�Ɠ������Aobj&nbsp;�ɑ΂����A�N�Z�X�ƂȂ�</span><br />
<code class="bq"><span class="weak">:</span><br />&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;obj&nbsp;=&nbsp;new&nbsp;FooBarClass();&nbsp;<span class="comment">//&nbsp;オブジェクトを作成</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;obj.method();&nbsp;<span class="comment">//&nbsp;オブジェクトのメソッドを普通に呼び出す</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;objmethod&nbsp;=&nbsp;obj.method;&nbsp;<span class="comment">//&nbsp;オブジェクトのメソッドへの参照を&nbsp;objmethod&nbsp;に代入</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;objmethod();&nbsp;<span class="comment">//&nbsp;objmethod&nbsp;を呼び出すが、obj.method()&nbsp;と同じく、obj&nbsp;に対するアクセスとなる</span><br />
</code>
<br />
<br />
�@<a id="id62" name="id62" class="targanchor"><dfn>incontextof</dfn></a> ���Z�q�́A�ǂ̃I�u�W�F�N�g�̃����o�ł��邩�A�̏������ύX���A�C�ӂ̃R���e�L�X�g���Ń��\�b�h�����s���邽�߂̕��@���񋟂��܂��B<br />
 <a id="id62" name="id62" class="targanchor"><dfn>incontextof</dfn></a> 演算子は、どのオブジェクトのメンバであるか、の情報を変更し、任意のコンテキスト上でメソッドを実行するための方法を提供します。<br />
<br />
<code class="bq"><span class="weak">��:</span><br />&nbsp;&nbsp;&nbsp;&nbsp;(objmethod&nbsp;incontextof&nbsp;obj2)();&nbsp;<span class="comment">//&nbsp;obj2&nbsp;�ɑ΂��鑀���ɂȂ�</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;(objmethod&nbsp;incontextof&nbsp;this)();&nbsp;<span class="comment">//&nbsp;this&nbsp;�ɑ΂��鑀���ɂȂ�</span></code>
<code class="bq"><span class="weak">:</span><br />&nbsp;&nbsp;&nbsp;&nbsp;(objmethod&nbsp;incontextof&nbsp;obj2)();&nbsp;<span class="comment">//&nbsp;obj2&nbsp;に対する操作になる</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;(objmethod&nbsp;incontextof&nbsp;this)();&nbsp;<span class="comment">//&nbsp;this&nbsp;に対する操作になる</span></code>
<br />
</div></div>
<h1><a id="id63" name="id63">�p��</a>
<h1><a id="id63" name="id63">継承</a>
</h1><div class="para"><div>
�@�L�[���[�h <a id="id64" name="id64" class="targanchor"><dfn>extends</dfn></a> ���p�����ƁA�N���X���ʂ̃N���X�����p�������邱�Ƃ��ł��܂��B�p���Ƃ́A�p�����̃N���X�̃����o�������p�����Ƃł��B<br />
�@�p�����錳�ƂȂ��N���X�̂��Ƃ�<a id="id65" name="id65" class="targanchor"><dfn>�X�[�p�[�N���X</dfn></a>�A�p�������N���X�̂��Ƃ�<a id="id66" name="id66" class="targanchor"><dfn>�T�u�N���X</dfn></a>�ƌĂт܂��B<br />
�@�ȉ��̂悤�ɂ��ăN���X���錾���܂��B<br />
 キーワード <a id="id64" name="id64" class="targanchor"><dfn>extends</dfn></a> を用いると、クラスを別のクラスから継承させることができます。継承とは、継承元のクラスのメンバを引き継ぐことです。<br />
 継承する元となるクラスのことを<a id="id65" name="id65" class="targanchor"><dfn>スーパークラス</dfn></a>、継承したクラスのことを<a id="id66" name="id66" class="targanchor"><dfn>サブクラス</dfn></a>と呼びます。<br />
 以下のようにしてクラスを宣言します。<br />
<br />
<code class="bq"><span class="weak">��:</span><br />&nbsp;&nbsp;&nbsp;&nbsp;class&nbsp;Class1&nbsp;<span class="comment">//&nbsp;�X�[�p�[�N���X</span><br />
<code class="bq"><span class="weak">:</span><br />&nbsp;&nbsp;&nbsp;&nbsp;class&nbsp;Class1&nbsp;<span class="comment">//&nbsp;スーパークラス</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;function&nbsp;Class1()&nbsp;<span class="comment">//&nbsp;Class1&nbsp;�R���X�g���N�^</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;function&nbsp;Class1()&nbsp;<span class="comment">//&nbsp;Class1&nbsp;コンストラクタ</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
@@ -250,9 +250,9 @@
<br />
&nbsp;&nbsp;&nbsp;&nbsp;class&nbsp;Class2&nbsp;extends&nbsp;Class1<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;function&nbsp;Class2()&nbsp;<span class="comment">//&nbsp;Class2&nbsp;�R���X�g���N�^</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;function&nbsp;Class2()&nbsp;<span class="comment">//&nbsp;Class2&nbsp;コンストラクタ</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;super.Class1();&nbsp;<span class="comment">//&nbsp;Class1&nbsp;�R���X�g���N�^����</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;super.Class1();&nbsp;<span class="comment">//&nbsp;Class1&nbsp;コンストラクタを呼ぶ</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;function&nbsp;finalize()&nbsp;<span class="comment">//&nbsp;Class2&nbsp;finalize</span><br />
@@ -261,30 +261,30 @@
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;obj&nbsp;=&nbsp;new&nbsp;Class2();&nbsp;<span class="comment">//&nbsp;Class2&nbsp;�I�u�W�F�N�g���쐬</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;obj.method1();&nbsp;<span class="comment">//&nbsp;Class2&nbsp;��&nbsp;Class1&nbsp;��&nbsp;method1&nbsp;���p�����Ă����̂Ŏg�p���邱�Ƃ��ł���</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;obj&nbsp;=&nbsp;new&nbsp;Class2();&nbsp;<span class="comment">//&nbsp;Class2&nbsp;オブジェクトを作成</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;obj.method1();&nbsp;<span class="comment">//&nbsp;Class2&nbsp;&nbsp;Class1&nbsp;&nbsp;method1&nbsp;を継承しているので使用することができる</span><br />
</code>
<br />
�@���L�̗��ł́AClass2 �� Class1 ���p�����Ă��܂��BClass2 �� Class1 ����<a id="id67" name="id67" class="targanchor"><dfn>�h��</dfn></a>���Ă����A�Ƃ������܂��B<br />
�@Class2 �̃R���X�g���N�^���ł� Class1 �̃R���X�g���N�^���AClass2 �� finalize �ł� Class1 �� finalize ���Ă��ł��܂��B<em>�T�u�N���X���A�������̃��\�b�h���ŃX�[�p�[�N���X�̊Y�����铯���\�b�h���Ăяo���Ȃ������ꍇ�̓����͖����`</em> ( �Ƃ��������o�[�W�����ł͌Ă񂾂��ǂ����`�F�b�N���Ă��Ȃ� ) �ł��̂ŁA�K���L�q�����悤�ɂ��Ă��������B<br />
 上記の例では、Class2 Class1 を継承しています。Class2 Class1 から<a id="id67" name="id67" class="targanchor"><dfn>派生</dfn></a>している、とも言います。<br />
 Class2 のコンストラクタ内では Class1 のコンストラクタを、Class2 finalize では Class1 finalize を呼んでいます。<em>サブクラスが、これらのメソッド内でスーパークラスの該当する同メソッドを呼び出さなかった場合の動作は未定義</em> ( というか現バージョンでは呼んだかどうかチェックしていない ) ですので、必ず記述するようにしてください。<br />
<br />
�@�T�u�N���X�����X�[�p�[�N���X���Q�Ƃ��邽�߂ɂ́A���L�̗��̂悤�ɃL�[���[�h <a id="id68" name="id68" class="targanchor"><dfn>super</dfn></a> ���g�p���邱�Ƃ��ł��܂��B���̃L�[���[�h�̓T�u�N���X���ł̂ݎg�p�”\�ŁA�X�[�p�[�N���X���\�����̂ł��B<br />
 サブクラスからスーパークラスを参照するためには、上記の例のようにキーワード <a id="id68" name="id68" class="targanchor"><dfn>super</dfn></a> を使用することができます。このキーワードはサブクラス内でのみ使用可能で、スーパークラスを表すものです。<br />
<br />
�@�p�����s�����Ă����ꍇ�́Anew ���Z�q�ł̃I�u�W�F�N�g�̏������̏����͈ȉ��̒ʂ��ł��B<br />
 継承が行われている場合の、new 演算子でのオブジェクトの初期化の順序は以下の通りです。<br />
<br />
<ol><li>�܂����̃I�u�W�F�N�g���쐬������</li><li>���\�b�h�A�v���p�e�B���o�^������ ( �X�[�p�[�N���X�������ɁA�T�u�N���X�Ɍ������� )</li><li>�����o�ϐ����쐬������ ( �X�[�p�[�N���X�������ɁA�T�u�N���X�Ɍ������� )</li><li>�T�u�N���X�̃R���X�g���N�^���Ă΂���</li><li>( �T�u�N���X�̃R���X�g���N�^������ ) �X�[�p�[�N���X�̃R���X�g���N�^���Ă΂���</li></ol></div></div>
<h1><a id="id69" name="id69">���d�p��</a>
<ol><li>まず空のオブジェクトが作成される</li><li>メソッド、プロパティが登録される ( スーパークラスから先に、サブクラスに向かって )</li><li>メンバ変数が作成される ( スーパークラスから先に、サブクラスに向かって )</li><li>サブクラスのコンストラクタが呼ばれる</li><li>( サブクラスのコンストラクタ内から ) スーパークラスのコンストラクタが呼ばれる</li></ol></div></div>
<h1><a id="id69" name="id69">多重継承</a>
</h1><div class="para"><div>
�@extends �̌��ɁA�X�[�p�[�N���X���𕡐��L�q�����ƁA���d�p�����s�킹�邱�Ƃ��ł��܂��B<br />
 extends の後に、スーパークラス名を複数記述すると、多重継承を行わせることができます。<br />
<br />
<code class="bq"><span class="weak">��:</span><br />&nbsp;&nbsp;&nbsp;&nbsp;class&nbsp;SubClass&nbsp;extends&nbsp;ClassA,&nbsp;ClassB<br />
<code class="bq"><span class="weak">:</span><br />&nbsp;&nbsp;&nbsp;&nbsp;class&nbsp;SubClass&nbsp;extends&nbsp;ClassA,&nbsp;ClassB<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;function&nbsp;SubClass()&nbsp;<span class="comment">//&nbsp;SubClass&nbsp;�R���X�g���N�^</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;function&nbsp;SubClass()&nbsp;<span class="comment">//&nbsp;SubClass&nbsp;コンストラクタ</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ClassA();&nbsp;<span class="comment">//&nbsp;ClassA&nbsp;�R���X�g���N�^����</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ClassB();&nbsp;<span class="comment">//&nbsp;ClassB&nbsp;�R���X�g���N�^����</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ClassA();&nbsp;<span class="comment">//&nbsp;ClassA&nbsp;コンストラクタを呼ぶ</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ClassB();&nbsp;<span class="comment">//&nbsp;ClassB&nbsp;コンストラクタを呼ぶ</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;function&nbsp;finalize()&nbsp;<span class="comment">//&nbsp;Class2&nbsp;finalize</span><br />
@@ -297,19 +297,19 @@
</code>
<br />
�@super �L�[���[�h���g���Ȃ����߁A�����I�ɃN���X���w�肵�Ȃ����΂Ȃ��܂����B���̂悤�� �X�[�p�[�N���X�̃��\�b�h���ĂԂƂ��� global. ���킴�킴�‚��ăN���X�ɃA�N�Z�X�����̂́A�T�u�N���X���ŒP�� ClassA �ƋL�q������ ClassA �̃R���X�g���N�^�̂��Ƃ��w�������ł��B�N���X���̂��̂� global �ɓo�^�����邽�߁Aglobal. ���p���ăN���X�ɃA�N�Z�X���܂��B<br />
 super キーワードが使えないため、明示的にクラスを指定しなければなりません。例のように スーパークラスのメソッドを呼ぶときに global. をわざわざつけてクラスにアクセスするのは、サブクラス内で単に ClassA と記述すると ClassA のコンストラクタのことを指すからです。クラスそのものは global に登録されるため、global. を用いてクラスにアクセスします。<br />
<br />
�@���d�p�����s�����Ă����ꍇ�́Anew ���Z�q�ł̃I�u�W�F�N�g�̏������̏����͑��d�p�����s���Ă��Ȃ��Ƃ��̂����Ɠ��������A�X�[�p�[�N���X�̃��\�b�h�A�v���p�e�B�̓o�^�̏��Ԃ́Aextends �L�[���[�h�̌��ɏ��������ɍs�����܂��B�p�����̃N���X�Ԃœ����̃��\�b�h���v���p�e�B���������ꍇ�́A���ɏ������ق����D�悳���܂��B�B���Ă��܂������\�b�h���v���p�e�B�ɂ́Aglobal.ClassA.hiddenMethod() �̂悤�ɖ����I�ɃN���X���������ăA�N�Z�X���鎖���ł��܂��B<br />
 多重継承が行われている場合の、new 演算子でのオブジェクトの初期化の順序は多重継承を行っていないときのそれと同じすが、スーパークラスのメソッド、プロパティの登録の順番は、extends キーワードの後に書いた順に行われます。継承元のクラス間で同名のメソッドやプロパティがあった場合は、後に書いたほうが優先されます。隠れてしまったメソッドやプロパティには、global.ClassA.hiddenMethod() のように明示的にクラス名を書いてアクセスする事ができます。<br />
</div></div>
<h1><a id="id70" name="id70">�I�[�o�[���C�h</a>
<h1><a id="id70" name="id70">オーバーライド</a>
</h1><div class="para"><div>
�@�T�u�N���X�ŃX�[�p�[�N���X�̃��\�b�h�⃁���o�v���p�e�B�Ɠ����̂��̂��錾�����ƁA�X�[�p�[�N���X�̃��\�b�h���B�����Ƃ��ł��܂��B�������I�[�o�[���C�h�ƌĂт܂��B<br />
�@���L�̐����̒��ɂłĂ��� finalize ���\�b�h�́A�X�[�p�[�N���X�� finalize ���\�b�h���I�[�o�[���C�h���Ă��܂��B<br />
 サブクラスでスーパークラスのメソッドやメンバプロパティと同名のものを宣言すると、スーパークラスのメソッドを隠すことができます。これをオーバーライドと呼びます。<br />
 上記の説明の中にでてきた finalize メソッドは、スーパークラスの finalize メソッドをオーバーライドしています。<br />
<br />
<code class="bq"><span class="weak">��:</span><br />&nbsp;&nbsp;&nbsp;&nbsp;class&nbsp;Class1&nbsp;<span class="comment">//&nbsp;�X�[�p�[�N���X</span><br />
<code class="bq"><span class="weak">:</span><br />&nbsp;&nbsp;&nbsp;&nbsp;class&nbsp;Class1&nbsp;<span class="comment">//&nbsp;スーパークラス</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;function&nbsp;Class1()&nbsp;<span class="comment">//&nbsp;Class1&nbsp;�R���X�g���N�^</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;function&nbsp;Class1()&nbsp;<span class="comment">//&nbsp;Class1&nbsp;コンストラクタ</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
@@ -319,16 +319,16 @@
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;function&nbsp;method1()&nbsp;<span class="comment">//&nbsp;method1</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(��)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;class&nbsp;Class2&nbsp;extends&nbsp;Class1<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;function&nbsp;Class2()&nbsp;<span class="comment">//&nbsp;Class2&nbsp;�R���X�g���N�^</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;function&nbsp;Class2()&nbsp;<span class="comment">//&nbsp;Class2&nbsp;コンストラクタ</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;super.Class1();&nbsp;<span class="comment">//&nbsp;Class1&nbsp;�R���X�g���N�^����</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;super.Class1();&nbsp;<span class="comment">//&nbsp;Class1&nbsp;コンストラクタを呼ぶ</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;function&nbsp;finalize()&nbsp;<span class="comment">//&nbsp;Class2&nbsp;finalize</span><br />
@@ -336,23 +336,23 @@
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;super.finalize();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;function&nbsp;method1()&nbsp;<span class="comment">//&nbsp;Class1.method1&nbsp;���I�[�o�[���C�h</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;function&nbsp;method1()&nbsp;<span class="comment">//&nbsp;Class1.method1&nbsp;をオーバーライド</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(��)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(��)&nbsp;return&nbsp;super.method1();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(��)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if()&nbsp;return&nbsp;super.method1();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;obj&nbsp;=&nbsp;new&nbsp;Class2();&nbsp;<span class="comment">//&nbsp;Class2&nbsp;�I�u�W�F�N�g���쐬</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;obj.method1();&nbsp;<span class="comment">//&nbsp;Class2&nbsp;��&nbsp;method1&nbsp;���Ă΂���</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;obj&nbsp;=&nbsp;new&nbsp;Class2();&nbsp;<span class="comment">//&nbsp;Class2&nbsp;オブジェクトを作成</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;obj.method1();&nbsp;<span class="comment">//&nbsp;Class2&nbsp;&nbsp;method1&nbsp;が呼ばれる</span><br />
</code>
<br />
�@�T�u�N���X�̃��\�b�h���v���p�e�B�ł� super �L�[���[�h���p���ăX�[�p�[�N���X�̃��\�b�h���v���p�e�B�ɃA�N�Z�X���邱�Ƃ��ł��܂��B<br />
 サブクラスのメソッドやプロパティでは super キーワードを用いてスーパークラスのメソッドやプロパティにアクセスすることができます。<br />
<br />
�@�����o�ϐ����I�[�o�[���C�h���邱�Ƃ͂ł��܂����B�����o�ϐ��͈��‚̃I�u�W�F�N�g�ɑ΂��ēo�^�����邽�߁A�T�u�N���X�ƃX�[�p�[�N���X�œ����̃����o�֐���������
�T�u�N���X�̕ϐ����X�[�p�[�N���X�̕ϐ����㏑�����Ă��܂��܂��B<br />
 メンバ変数をオーバーライドすることはできません。メンバ変数は一つのオブジェクトに対して登録されるため、サブクラスとスーパークラスで同名のメンバ関数があると
サブクラスの変数がスーパークラスの変数を上書きしてしまいます。<br />
</div></div>
<script type="text/javascript" charset="Shift_JIS" src="documentid.js" ></script>
<script type="text/javascript" charset="Shift_JIS" src="postcontent.js" ></script>