すぎたです。

In message news:Fo9Na.134$FN4.59@news1.dion.ne.jp
"ITAHASHI Kunio" <kunitahashi@h2.dion.ne.jp> 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は重複可として、結果を配列で取得)
  <script>
  function Regulat() {
    this.datatbl = new Array();
    this.result  = new Array();
  }
  Regulat.prototype.AddData = function (srNr, Gas) {
    this.datatbl[Gas] = srNr;
  }
  Regulat.prototype.GetSrNr = function (Gas) {
    return this.datatbl[Gas];
  }
  Regulat.prototype.GetGas = function (srNr) {
    // 一時保存用の result ではなく、個別のメモリ領域に保存
    // したい場合は、ここで var result = new Array(); として、
    // result[n++] = i; のようにすれば可能です。
    var n = 0;
    this.result.length = 0;
    for (i in this.datatbl) {
      if (this.datatbl[i] == srNr)
        this.result[n++] = i;
    }
    return this.result;
  }
  var mater = new Regulat();
  mater.AddData('12345', 'NOx');
  mater.AddData('67890', 'COx');
  alert(mater.GetSrNr('NOx'));
  alert(mater.GetGas ('67890'));
  </script>

-- 
杉田
sugi-nws@bk.iij4u.or.jp