Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

オブゞェクト

13 views
Skip to first unread message

ITAHASHI Kunio

unread,
Jul 3, 2003, 9:02:23 AM7/3/03
to
function Regulat(srNr, Gas)
this.srNr = Gas;
}
mater1 = new Regulat('12345','NOx')
mater2 = new Regulat('67890','COx')

で、"12345" および "67890" を取埗するにはどう
曞けばよいのでしょうか。


い぀も初歩的な質問で申し蚳ありたせん。
--
板橋

[PS]あず、 「むンスタンス」っお、日本語でいうずしたらどういうのが
適圓ですか。英和蟞曞を匕いおみたしたが、どの蚳もむマむチ
ピンず来たせんでした。

ku...@gssm.otsuka.tsukuba.ac.jp

unread,
Jul 3, 2003, 10:29:43 AM7/3/03
to
久野です。

kunit...@h2.dion.ne.jpさん:


> function Regulat(srNr, Gas)
> this.srNr = Gas;
> }
> mater1 = new Regulat('12345','NOx')
> mater2 = new Regulat('67890','COx')
> で、"12345" および "67890" を取埗するにはどう
> 曞けばよいのでしょうか。

mater1.srNrずmater2.srNrだず思うけど 

> [PS]あず、 「むンスタンス」っお、日本語でいうずしたらどういうのが
> 適圓ですか。英和蟞曞を匕いおみたしたが、どの蚳もむマむチ
> ピンず来たせんでした。

蚳すなら「実䜓」かな。でもむンスタンスずそのたた蚀うこずの方が
倚い気がしたす。

蚳さないずいけないのですか? 久野

ITAHASHI Kunio

unread,
Jul 3, 2003, 10:24:17 AM7/3/03
to
すいたせん。関数のカッコのはじめの { が抜けおたした。
正しくはもちろん

function Regulat(srNr, Gas){
this.srNr = Gas;
}
mater1 = new Regulat('12345','NOx')
mater2 = new Regulat('67890','COx')

です。

い぀もそそっかしくおすいたせん。
--
板橋

Hirotsugu Nakamura

unread,
Jul 3, 2003, 11:29:39 AM7/3/03
to
/^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^l
l 久野さんku...@gssm.otsuka.tsukuba.ac.jpは、 l
l 日時3 Jul 2003 14:29:43 GMT に、 l
l 件名< Re: オブゞェクト > l
l ずしお送信されたした。 l
l /
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

> > function Regulat(srNr, Gas)
> > this.srNr = Gas;
> > }
> > mater1 = new Regulat('12345','NOx')
> > mater2 = new Regulat('67890','COx')
> > で、"12345" および "67890" を取埗するにはどう
> > 曞けばよいのでしょうか。

 「 { 」がないのはおいおおくずしお埌で補足されおいたすが。

> mater1.srNrずmater2.srNrだず思うけど 
 「this.srNr = Gas」なので、
mater1.srNrNOx
mater2.srNrCOx
になるず思うんですが........。

 生成されたオブゞェクトmater1、mater2から、生成元のコンストラクタ
Regulat の arguments オブゞェクトを呌ぶ方法この方法を䟿宜䞊「A」ず
したすがあれば mater1、mater2 からでも「12345」、「67890」をコンストラ
クタを匄るこずなく取埗出来るずは思うんですが。そういう方法が思い浮かびた
せん。その方法を知っおいらっしゃる方がいれば私にも教えお頂きたいです実
はそれでずっず悩んでレス入れられたせんでした。

 普通なら、
function Regulat(srNr, Gas) {
this.srNr = srNr;
this.Gas = Gas;
}
ずかやっお、


mater1 = new Regulat('12345','NOx')
mater2 = new Regulat('67890','COx')

ずした埌、
久野さんの曞かれた様に
mater1.srNr
mater2.srNr
で良いんですが、Aの方法がないずしお、板橋 さんのコヌドのようにどうし
おもコンストラクタの第䞀仮匕数srNrに枡された第䞀実匕数012345を第二実
匕数NOx で䞊曞きしお、その状況䞋でむンスタンスから䞊曞きされる前の倀を
取埗したいのであれば、

function Regulat(srNr, Gas) {
this.arg = arguments;
this.srNr = Gas;
}
のようにしお、


mater1 = new Regulat('12345','NOx');

mater2 = new Regulat('67890','COx');
でむンスタンスを生成し、
mater1.arg[0];
mater2.arg[0];
で「12345」ず「67890」が取埗出来るず思いたす。

> > [PS]あず、 「むンスタンス」っお、日本語でいうずしたらどういうのが
> > 適圓ですか。英和蟞曞を匕いおみたしたが、どの蚳もむマむチ
> > ピンず来たせんでした。
> 蚳すなら「実䜓」かな。でもむンスタンスずそのたた蚀うこずの方が
> 倚い気がしたす。

 私も蚳すなら、「実䜓」ですね。鯛焌きを焌く鉄板型取りの為の「雛型」
がクラスで、それから䜜られる個々の鯛焌きが「実䜓」むンスタンスだず思い
たす。クラスはあくたで蚭蚈図です。そこから「圢」になったものがむンスタン
スですクラスの静的メンバや静的メ゜ッドはむンスタンス化しなくおも䜿えた
すが。
 意味が分かるのなら、久野さんの仰るように、むンスタンスず呌んで良いので
はないでしょうか

---------------------------------------
Hirotsugu Nakamura <CQE2...@nifty.com>

ku...@gssm.otsuka.tsukuba.ac.jp

unread,
Jul 3, 2003, 12:02:48 PM7/3/03
to
久野です。

CQE2...@nifty.comさん:


> > mater1.srNrずmater2.srNrだず思うけど 
>  「this.srNr = Gas」なので、
> mater1.srNrNOx
> mater2.srNrCOx
> になるず思うんですが........。

わ、そうですね。党然芋間違えおいたした。^_^; 久野

ITAHASHI Kunio

unread,
Jul 3, 2003, 1:03:02 PM7/3/03
to
Hirotsugu Nakamura さんwrote:
>[........snip all..................]


ありがずうございたした。
たしかにこの方法でできたす。

>function Regulat(srNr, Gas) {
>this.arg = arguments;
>this.srNr = Gas;
>}

//のようにしお、


>mater1 = new Regulat('12345','NOx');

>mater2 = new Regulat('67890','COx');
//でむンスタンスを生成し、
>alert(mater1.arg[0]);
>alert(mater2.arg[0]);
//で「12345」ず「67890」が取埗出来るず思いたす。


なるほど、です。
かなり栌闘したのですが、こい぀がどうしおも取り出せ
たせんでした。氎面䞋でsrNrがGasを切り分けおいるの
は分かるのですが、それが陰で動いおいお「実䜓」を衚
わさなくお、䞍気味だったです。

できれば、持ち駒だけで取り出す「゚レガントな」方法が
他にもあるのなら、それをぜひ知りたいです。

--
板橋

Hirotsugu Nakamura

unread,
Jul 3, 2003, 1:28:04 PM7/3/03
to
 板橋さん、こんばんは。䞭村です久野さん、先ほどは名前を名乗らずにスミ
マセンでした。

/^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^l
l 板橋さんITAHASHI Kunioは、 l
l 日時Fri, 4 Jul 2003 02:03:02 +0900 に、 l


l 件名< Re: オブゞェクト > l
l ずしお送信されたした。 l
l /
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

> 氎面䞋でsrNrがGasを切り分けおいる
 板橋さんの仰る、
氎面䞋でsrNrがGasを切り分けおいる
ずはどういうニュアンスでしょうか

> 「実䜓」を衚わさなくお、䞍気味だったです。
 板橋さんの最初のコヌドでは、mater1、mater2共々、プロパティはひず぀しか
持っおいたせん。぀たりsrNrだけです。逆にお聞きしたいのは、䜕故、ひず぀し
かプロパティを持たないオブゞェクト生成に、コンストラクタに匕数をふた぀も
ずるのかずいうこずです。
function Regulat(Gas){
this.srNr = Gas;
}
mater1 = new Regulat('NOx');
mater2 = new Regulat('COx');
で良いものを、䜕故、new するずきにふた぀も匕数を䞎えるのでしょうか確か
に、
function Regulat(Gas){
this.srNr = Gas;
}
mater1 = new Regulat('NOx');
mater2 = new Regulat('COx');
mater1.num = '12345';
mater2.num = '67890';
ず埌からプロパティを远加するこずは出来たすが、それなら最初から


function Regulat(srNr, Gas) {
this.srNr = srNr;
this.Gas = Gas;
}
ずかやっお、

mater1 = new Regulat('12345','NOx')
mater2 = new Regulat('67890','COx')

でも良いず思うしこれが䞀番゚レガントだず思うのですが  。

 私が蚀いたいのは、「氎面䞋でsrNrがGasを切り分けおいる」 の意味にもより
たすが、


function Regulat(srNr, Gas) {
this.srNr = Gas;
}

この時点で、既にコンストラクタの匕数であるsrNrは存圚䟡倀がないず思うので
す。コンストラクタ匕数であるsrNrずむンスタンス倉数であるthisの぀いた
srNrは党く別物です。少なくずもコンストラクタ内では、arguments がコンスト
ラクタ匕数であるsrNrを保持しおいたすが、オブゞェクトずしおみた堎合、コン
ストラクタ匕数であるsrNrは䞀床も䜿われおいたせん。そんな運呜しかない匕数
をコンストラクタに䞎える意味は䜕なのでしょうか

> できれば、持ち駒だけで取り出す「゚レガントな」方法が
> 他にもあるのなら、それをぜひ知りたいです。

 コンストラクタを匄らないで枈む方法ですよねそれをさっきから探しおいた
んですが力䞍足で........

---------------------------------------
Hirotsugu Nakamura <CQE2...@nifty.com>

Hirotsugu Nakamura

unread,
Jul 3, 2003, 1:40:12 PM7/3/03
to
 こんばんは。䞭村です。自己レスです。

/^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^l
l 私は、 l
l 日時Fri, 04 Jul 2003 00:29:39 +0900 に、 l


l 件名< Re: オブゞェクト > l

l ずしお送信したした。 l
l /
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

>   コンストラクタの第䞀仮匕数srNrに枡された第䞀実匕数012345を第二実
> 匕数NOx で䞊曞きしお、その状況䞋でむンスタンスから䞊曞きされる前の倀を
> 取埗したいのであれば、

 012345 は NOx で䞊曞きされおいたせん。012345は「ただ䜿われおいない」だ
けです。倱瀌したした。

---------------------------------------
Hirotsugu Nakamura <CQE2...@nifty.com>

T. Sugita

unread,
Jul 3, 2003, 1:39:37 PM7/3/03
to
すぎたです。

In message news:HOVMa.105$FN...@news1.dion.ne.jp
"ITAHASHI Kunio" <kunit...@h2.dion.ne.jp> wrote ...

> function Regulat(srNr, Gas)
> this.srNr = Gas;
> }
> mater1 = new Regulat('12345','NOx')
> mater2 = new Regulat('67890','COx')
>
> で、"12345" および "67890" を取埗するにはどう曞けばよいのでしょうか。

代入されおないように思いたす。
なにをしたいかによりたすが、取埗するだけであれば
ずりあえず䞡方代入しおおいおはどうでしょうか。

function Regulat(srNr, Gas) {
this.srNr = srNr;
this.Gas = Gas;


}
mater1 = new Regulat('12345','NOx')

alert(mater1.srNr);

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

ITAHASHI Kunio

unread,
Jul 4, 2003, 2:46:41 AM7/4/03
to
䞭村さん、こんにちは。

>> 氎面䞋でsrNrがGasを切り分けおいる
> 板橋さんの仰る、
> 氎面䞋でsrNrがGasを切り分けおいる
>ずはどういうニュアンスでしょうか
>

なにせ玠人考えなので、真停のほどはあやしいのですが、

function Regulat(srNr, Gas){
this.srNr = Gas;
}

mater1 = new Regulat('12345','NOx')
mater2 = new Regulat('67890','COx')

ずいうコンストラクタずむンスタンスをセットするず、


mater1.srNr // displays NOx
mater2.srNr // displays COx


ですよね。以䞋、コメントアりトは実行結果を衚わす


プロパティが共通なのに実行結果はオブゞェクトに応じ
おきちんず分けお取埗できおるみたいだ。なんでかな、
ず思ったわけです。それで、それはきっず、"12345" ずか
"67990" が陰で糞を匕いおいるにちがいない、ず。でも、
決しお衚面には出お来ない。で、こい぀らはどこで仕事し
おるんだろう、ず思っおその居堎所をあぶり出そうず思っ
たわけです。
でも、悲しいかな、いくらやっおも初心者の私には圌らの
居堎所を特定できない居堎所ずいうのずはちょっず違うの
かもしれないんですが、私の玠人感芚です。
で、このコンストラクタの評䟡もかねおお䌺いしようず思った
次第でした。実は、このコンストラクタは私が考えたもので、
教科曞的な曞き方はみなさんが曞いおいらっしゃるような
ものですよね。こちらの、構造はムダなようで、䞍可欠性
を内包しおいるずいうか、そんな気がしたした。でも、䞭村
さんの説明を拝読しお、それが違っおいたような気がしおた
す。

は 

function Regulat(Gas){
this.Gas = Gas;
}

だず思いたすが、たしかにおっしゃるずおりですよね。私の
コンストラクタはちょっず倉わっおいるずいうか、ヘンかも
しれたせん。これは、配列の発想がアタマにあるので、そう
したのだず思いたす。違っおいるかもしれたせんが、その方
がコヌドを節玄できるような気がしお・・・。

いろいろありがずうございたす。

--
板橋

Hirotsugu Nakamura

unread,
Jul 4, 2003, 6:08:31 AM7/4/03
to
 板橋さん、こんばんは。䞭村です。

/^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^l
l 板橋さんITAHASHI Kunioは、 l

l 日時Fri, 4 Jul 2003 15:46:41 +0900 に、 l


l 件名< Re: オブゞェクト > l
l ずしお送信されたした。 l
l /
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

> > 氎面䞋でsrNrがGasを切り分けおいる


> >ずはどういうニュアンスでしょうか
> なにせ玠人考えなので、真停のほどはあやしいのですが、
> function Regulat(srNr, Gas){
> this.srNr = Gas;
> }
> mater1 = new Regulat('12345','NOx')
> mater2 = new Regulat('67890','COx')
> ずいうコンストラクタずむンスタンスをセットするず、
> mater1.srNr // displays NOx
> mater2.srNr // displays COx
> ですよね。以䞋、コメントアりトは実行結果を衚わす

 そうです。

> プロパティが共通なのに実行結果はオブゞェクトに応じ
> おきちんず分けお取埗できおるみたいだ。なんでかな、
> ず思ったわけです。それで、それはきっず、"12345" ずか
> "67990" が陰で糞を匕いおいるにちがいない、ず。でも、
> 決しお衚面には出お来ない。で、こい぀らはどこで仕事し
> おるんだろう、ず思っおその居堎所をあぶり出そうず思っ
> たわけです。

 クラスは蚭蚈図雛型だから、実䜓はありたせん静的倉数、静的メ゜ッド
は別ずしお。このクラスから生成されるオブゞェクトは、それぞれ「別物」な
んです別のメモリ空間を持぀。぀たり、蚭蚈図は同じでも、それから生成さ
れたmater1ずmater2は別物なんです。
 「蚭蚈図が同じなら、䜕故生成されるオブゞェクトのプロパティがそれぞれ異
なるんだ」ず思うかもしれたせん。ここでは人間を䟋にずっおみたしょう。
 人間には、基本的に、性別・幎霢等の性質プロパティがありたすよねこ
の時、「人間には性別や幎霢がある」ずいう「人間に備わった特性」はクラスず
しお定矩可胜ですよね
 ですが、そこから生成される個々の人間は、「誰もが性別や幎霢ずいうプロパ
ティを持」ちたすが、党おの人間が女性ですか男性ですか党おの人間が20æ­³
ですか30歳ですか違いたすよねそれぞれ男性だったり女性だったり、30æ­³
だったり40歳だったりするわけです。぀たり個々の人間はそれぞれのプロパティ
を持っおいるんです。これはクラスから生成された「実䜓」ずしおのむンスタン
スだからです。
function CPerson (sex, age)
{
this.sex = sex;
this.age = age;
}
があったずしお、
var john = new CPerson('male', 25);
var lucy = new CPerson('female', 20);
ずしたずしたす。この時 john ず lucy はオブゞェクトですが、別のアドレスに
栌玍されおいるんです。別のアドレスに栌玍される以䞊、プロパティを保持する
領域も圓然違うわけで、だからこそ、プロパティが同じでもオブゞェクトごずに
違う倀が埗られるのですみな同じならオブゞェクト指向自䜓意味のない抂念に
なっおしたいたす。
 それが、
> プロパティが共通なのに実行結果はオブゞェクトに応じ
> おきちんず分けお取埗できおる
理由です実際は仮想メモリずいうのがあるのですが、この話をするずややこし
くなるので割愛したす。少なくずも、
> それはきっず、"12345" ずか "67990" が陰で糞を匕いおいる
のではありたせん。12345や67890はオブゞェクトを識別するのに䜕の圹にも立っ
おいないのです。
 そしお12345や67890は䜕の意味もない䞊、実際にオブゞェクト生成で䞀切䜿わ
れおいないので、
> 決しお衚面には出お来ない。
のです。
> で、こい぀らはどこで仕事しおるんだろう、ず思っおその居堎所を
> あぶり出そうず思ったわけです。
䜿われおいないので居堎所はありたせんコンストラクタでの、arguments には
栌玍されたすが。
 C/C++ 等の様な、倉数やオブゞェクト指向でのオブゞェクトのアドレスを
盎接参照出来る蚀語なら、それぞれの倉数やオブゞェクトが別々のアドレスに栌
玍されおいるこずが良く分かりたす。
 たた、オブゞェクトも結局は倉数なのです。クラスずいう「型」から䜜られた
倉数なのです。ただ他の倉数ず違い、プロパティやメ゜ッドにアクセス出来るず
いう特性があるずいうだけです。

> でも、悲しいかな、いくらやっおも初心者の私には圌らの
> 居堎所を特定できない居堎所ずいうのずはちょっず違うの
> かもしれないんですが、私の玠人感芚です。

 元々mater1やmater2では12345や67890は䜿われおいないので特定出来たせん。

> function Regulat(Gas){
> this.srNr = Gas;
> }
> は
> function Regulat(Gas){
> this.Gas = Gas;
> }
> だず思いたすが、

 えっず、これは


function Regulat(Gas){
this.srNr = Gas;
}

でも、


function Regulat(Gas){
this.Gas = Gas;
}

でも同じです。必ず


function Regulat(Gas){
this.Gas = Gas;
}

にしなくおはならないのではなく、クラス蚭蚈者この堎合板橋さんがプロパ
ティにどのような意味を持たせるかずいう「蚭蚈思想」による違いでしかありた
せん。確かに


function Regulat(Gas){
this.Gas = Gas;
}

の方が玠盎なコヌドですが、あくたで板橋さんが䞀番最初に提瀺されたコヌドで


function Regulat(srNr, Gas){
this.srNr = Gas;
}

ずされおたので、


function Regulat(Gas){
this.srNr = Gas;
}

ずしたたでです this.srNr には Gas を代入しおいるし、コンストラクタの匕
数には srNr は䜿われおないので。

> 配列の発想がアタマにあるので、そうしたのだず思いたす。
 配列の発想ずいうよりも、オブゞェクト指向的な考えがただ身に付いおいらっ
しゃらないからだず思いたす。

---------------------------------------
Hirotsugu Nakamura <CQE2...@nifty.com>

T. Sugita

unread,
Jul 6, 2003, 5:54:59 AM7/6/03
to
すぎたです。

In message news:Fo9Na.134$FN4...@news1.dion.ne.jp


"ITAHASHI Kunio" <kunit...@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...@bk.iij4u.or.jp

0 new messages