Path: ccsf.homeunix.org!ccsf.homeunix.org!news1.wakwak.com!nf1.xephion.ne.jp!onion.ish.org!onodera-news!newsfeed.media.kyoto-u.ac.jp!np0.iij.ad.jp!news.iij.ad.jp!news00.iij4u.or.jp!not-for-mail From: "T. Sugita" Newsgroups: fj.comp.lang.javascript Subject: =?iso-2022-jp?B?UmU6IBskQiUqJVYlOCUnJS8lSBsoQg==?= Date: Sun, 6 Jul 2003 18:54:59 +0900 Organization: Internet Initiative Japan Inc., Tokyo, JAPAN Lines: 134 Message-ID: References: <20030704000343.DEDC.CQE25120@nifty.com> <20030704020938.DEDF.CQE25120@nifty.com> NNTP-Posting-Host: h097.p200.iij4u.or.jp Mime-Version: 1.0 Content-Type: text/plain; charset="iso-2022-jp" Content-Transfer-Encoding: 7bit X-Trace: news00.iij4u.or.jp 1057485466 25495 210.130.200.97 (6 Jul 2003 09:57:46 GMT) X-Complaints-To: news@iij.ad.jp NNTP-Posting-Date: 6 Jul 2003 09:57:46 GMT X-Priority: 3 X-MSMail-Priority: Normal X-Newsreader: Microsoft Outlook Express 5.50.4922.1500 X-MimeOLE: Produced By Microsoft MimeOLE V5.50.4925.2800 Xref: ccsf.homeunix.org fj.comp.lang.javascript:45 すぎたです。 In message news:Fo9Na.134$FN4.59@news1.dion.ne.jp "ITAHASHI Kunio" wrote ... > function Regulat(Gas){ > this.srNr = Gas; > } > > は  > > function Regulat(Gas){ > this.Gas = Gas; > } > > だと思いますが、たしかにおっしゃるとおりですよね。 ここがちょっと気になるのですが、プロパティ名と引数とは 関係は無く、引数の内容によって保存先を管理しているという わけでも無いので、以下のようにしても可です。 function Regulat(a){ var b = a + ' gas'; this.c = b; } # 環境問題には疎い方なので srNr はなにか関連する略称かと # 思っていたのですが、もしかして保存位置を識別するための # シリアルナンバーとしてつけたのでしょうか? 実体のとらえかたですが、以下のように Object に全て関連付け られて保存されるわけではなく、 Regulat L srNr['12345'] = 'NOx' L srNr['67890'] = 'COx' 中村さんもおっしゃっておられる通り、別個に管理されます。 これは JavaScript の場合、new することで複製が作成され、 その位置を変数に代入して利用しているようなイメージに なります。 function Regulat(Gas) { this.a = Gas; } var mater1 = new Regulat('NOx'); var mater2 = new Regulat('COx'); mater1 = Regulatの複製1の位置 L a = 'NOx' mater2 = Regulatの複製2の位置 L a = 'COx' なので、 mater3 = mater2; とすると、mater2 を変更すると、参照先が同じなので mater3 でも同じ値となります。 mater2.a = 'ABC'; alert(mater3.a); # 以下、参考まで。 この mater2 から複製を作る正当な手段は JavaScript では 提供されていないので、 var mater3 = new Regulat('ABC'); とするか、次善策として var mater3 = new Regulat(); // Regulat()のコンストラクタに渡される引数は null か // undefined になると思うので、まずい場合は適当な値を指定。 for (var i in mater3) { // for in では、全てのプロパティが列挙されるわけでは // ないので、部分的なコピーになる場合があります。 mater3[i] = mater2[i]; } のようにする必要があります。 # 以下、参考その2 板橋さんが最初に考えられた、1つの管理領域でデータを扱いたい場合、 以下のようにするのも1つの手です。 (Gasベースで(重複するものがないとして)、関連するsrNrを参照する 場合なので、逆向きに対応付ける場合は、代入関係を逆にします) Regulat L datatbl : データを保存するための配列 L result : 実行結果を一時的に格納するための配列 (GetGas()実行で上書きされる) L AddData(srNr,Gas) : Gas を識別子として、srNr を保存 (Gasが重複した場合、上書きされる) L GetSrNr(Gas) : Gas を識別子として、srNr を取得 L GetGas (srNr) : srNr を識別子として、Gas を取得 (srNrは重複可として、結果を配列で取得) -- 杉田 sugi-nws@bk.iij4u.or.jp