<?xml version="1.0" encoding="utf-8"?><!DOCTYPE article  PUBLIC '-//OASIS//DTD DocBook XML V4.4//EN'  'http://www.docbook.org/xml/4.4/docbookx.dtd'><article><articleinfo><title>ecmaオブジェクト</title><revhistory><revision><revnumber>13</revnumber><date>2012-10-30 02:54:17</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>12</revnumber><date>2012-10-30 02:51:55</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>11</revnumber><date>2012-10-26 12:13:40</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>10</revnumber><date>2012-10-26 12:07:18</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>9</revnumber><date>2012-10-18 12:33:25</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>8</revnumber><date>2012-10-18 12:29:19</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>7</revnumber><date>2012-10-18 12:18:08</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>6</revnumber><date>2012-10-16 23:44:36</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>5</revnumber><date>2012-10-16 13:05:50</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>4</revnumber><date>2012-10-16 13:04:58</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>3</revnumber><date>2012-10-16 12:56:46</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>2</revnumber><date>2012-09-08 13:03:34</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>1</revnumber><date>2012-09-08 12:59:14</date><authorinitials>masahiko</authorinitials></revision></revhistory></articleinfo><section><title>ECMAscriptのオブジェクト</title><para>オブジェクトは属性(プロパティ)の集まりである。 </para><itemizedlist><listitem override="none"><para><inlinemediaobject><imageobject><imagedata fileref="http://ei-www.hyogo-dai.ac.jp/~masahiko/moin.cgi/ecma%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88?action=AttachFile&amp;do=get&amp;target=object1.png"/></imageobject><textobject><phrase>object1.png</phrase></textobject></inlinemediaobject> </para></listitem></itemizedlist><!--rule (<hr>) is not applicable to DocBook--><section><title>オブジェクトの生成</title><section><title>空オブジェクトを作成</title><itemizedlist><listitem override="none"><screen><![CDATA[var obj = new Object();]]></screen></listitem><listitem override="none"><para><inlinemediaobject><imageobject><imagedata fileref="http://ei-www.hyogo-dai.ac.jp/~masahiko/moin.cgi/ecma%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88?action=AttachFile&amp;do=get&amp;target=object2.png"/></imageobject><textobject><phrase>object2.png</phrase></textobject></inlinemediaobject> </para></listitem></itemizedlist></section><section><title>属性とその値を指定して作成</title><itemizedlist><listitem override="none"><screen><![CDATA[var obj = { name:'onigiri', price:150 };]]></screen></listitem><listitem override="none"><para><inlinemediaobject><imageobject><imagedata fileref="http://ei-www.hyogo-dai.ac.jp/~masahiko/moin.cgi/ecma%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88?action=AttachFile&amp;do=get&amp;target=object3.png"/></imageobject><textobject><phrase>object3.png</phrase></textobject></inlinemediaobject> </para></listitem></itemizedlist><!--rule (<hr>) is not applicable to DocBook--></section></section><section><title>属性名</title><para>属性(プロパティ)の名前は変数名と同様につけることができる。 </para><para>属性名にハイフンや空白など特殊な文字を含めたいときは、 'または&quot;で挟んで文字列として記述する。 </para><para>for, if などの予約語も文字列として記述すれば 属性名として使うことができる。 </para><para>上の例は次のように書いてもよい。 </para><itemizedlist><listitem override="none"><screen><![CDATA[var obj = { 'name':'onigiri', 'price':150 };]]></screen></listitem></itemizedlist><!--rule (<hr>) is not applicable to DocBook--></section><section><title>属性値の参照</title><para>つぎの形式で参照できる。 </para><itemizedlist><listitem override="none"><para>オブジェクト名.属性名 </para><screen><![CDATA[$ rhino
js> var obj = { name:'onigiri', price:150 };
js> print( obj.name );
onigiri
js> print( obj.price );
150
js> obj.price = 130;
js> print( obj.price );
130]]></screen></listitem></itemizedlist><!--rule (<hr>) is not applicable to DocBook--></section><section><title>連想配列として利用</title><para>属性値を次の形式で参照できる。 この場合、属性名は文字列で指定する。 </para><itemizedlist><listitem override="none"><para>オブジェクト名[属性名] </para><screen><![CDATA[$ rhino
js> var obj = { name:'onigiri', price:150 };
js> print( obj['name'] );
onigiri
js> key = 'price';
js> print( obj[key] );
150]]></screen></listitem></itemizedlist><!--rule (<hr>) is not applicable to DocBook--></section><section><title>すべての属性を調べる</title><itemizedlist><listitem override="none"><screen><![CDATA[var obj = { name:'onigiri', price:150 };
for (i in obj) {
    print( i, obj[i] );
}]]></screen></listitem></itemizedlist><!--rule (<hr>) is not applicable to DocBook--></section><section><title>call by value</title><para>関数呼び出しで、引数が number, string, boolean のときは call by value である。 </para><para>例 </para><itemizedlist><listitem override="none"><screen><![CDATA[function add1(k) {
    k = k + 1;
    return k;
}
]]><![CDATA[
var n = 3;
print( add1(n) );
print( n );]]></screen></listitem></itemizedlist><para>関数add1は引数に1を加え、その値を結果として返します。 </para><itemizedlist><listitem override="none"><para>引数に3を与えて呼び出すと4を返します。 </para></listitem><listitem override="none"><para>変数nを引数としても、関数に渡されるのは値3です。(call by value) </para></listitem><listitem override="none"><para>関数から戻った後でも変数nの値は変化していません。 </para></listitem></itemizedlist><para>実行結果は </para><itemizedlist><listitem override="none"><screen><![CDATA[4
3]]></screen></listitem></itemizedlist></section><section><title>call by reference</title><para>関数呼び出しで、引数がオブジェクトのときは call by reference である。 </para><para>例 </para><itemizedlist><listitem override="none"><screen><![CDATA[function addx(k) {
    k.x = k.x + 1;
    return k.x;
}
]]><![CDATA[
var m = { x:5 };
print( addx(m) );
print( m.x );]]></screen></listitem></itemizedlist><para>関数addxは引数として与えられたオブジェクトの属性xの値に1を加え、その値を結果として返します。 </para><itemizedlist><listitem override="none"><para>引数にはオブジェクトを与えて呼び出します。 </para></listitem><listitem override="none"><para>関数に渡されるのはオブジェクトの参照です。(call by reference) </para></listitem><listitem override="none"><para>関数から戻った後でも変数mは同じオブジェクトを保持していますが、 </para></listitem><listitem override="none"><para>オブジェクトの属性値は変化しています。 </para></listitem></itemizedlist><para>実行結果は </para><itemizedlist><listitem override="none"><screen><![CDATA[6
6]]></screen></listitem></itemizedlist></section></section></article>