[表示 : 全て 最新50 1-99 101- 201- 2chのread.cgiへ]
Update time : 05/09 16:57 / Filesize : 45 KB / Number-of Response : 200
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

{_proto: プロトタイプベース・オブジェクト指向};



1 名前:デフォルトの名無しさん [05/03/05 00:08:47 ]
実装談義も哲学論議も。


プロトタイプベース・オブジェクト指向とは sumim.no-ip.com:8080/wiki/493
Google Directory Prototype-based directory.google.com/Top/Computers/Programming/Languages/Object-Oriented/Prototype-based/
Self research.sun.com/research/self/
Io www.iolanguage.com/
ほか >>2-10あたり

前スレ
 プロトタイプベース・オブジェクト指向
 pc5.2ch.net/test/read.cgi/tech/1070886635/

98 名前:デフォルトの名無しさん mailto:sage [2005/10/05(水) 02:23:54 ]
self の良い書籍ってない?

99 名前:デフォルトの名無しさん mailto:sage [2005/10/05(水) 06:19:32 ]
書籍自体無いんじゃないかな。リサーチプロジェクトだし。

100 名前:デフォルトの名無しさん mailto:sage [2005/10/06(木) 07:01:47 ]
終了

101 名前:デフォルトの名無しさん mailto:sage [2005/10/06(木) 09:07:14 ]
ばいばい

102 名前:デフォルトの名無しさん mailto:sage [2005/10/07(金) 22:59:14 ]
>>98
どんなことが知りたいの?

103 名前:デフォルトの名無しさん mailto:sage [2005/10/10(月) 17:23:57 ]
Perlもプロトタイプベースみたいなことできるじゃん。
もうPerlでいいよ。

104 名前:デフォルトの名無しさん mailto:sage [2005/10/13(木) 02:38:40 ]
ttp://jp.rubyist.net/magazine/?0010-Legwork

105 名前:デフォルトの名無しさん mailto:sage [2005/10/13(木) 20:49:45 ]
↑ってお金もらえてるの?

106 名前:デフォルトの名無しさん mailto:sage [2005/10/16(日) 00:55:08 ]
誰が払うねん



107 名前:デフォルトの名無しさん mailto:sage [2005/10/16(日) 09:35:33 ]
ttp://mput.dip.jp/mput/?date=20051015#p11

Q PragProg の Language of the year で Ruby を学んで以来 Ruby を使い続けている。
あなたが同様に私たちに何か言語を薦めるとすれば何?

A Io かな。シンプルだし興味深い


Q さっき Io に触れましたね?
Ruby をもっとプロトタイプベースに近い形にしたりはしないのですか?

A いや。 Ruby のゴールは単純さではないから。たしかにプロトタイプベースは
仕組みとしてシンプルでよいと思うが、我々が処理の内容をプログラムに書
き下すときには、やはりクラスベースのほうが分かりやすいと思うんだ。
Ruby はそういう側面のほうに注力しているので、クラスベースをやめるつもりはない

108 名前:デフォルトの名無しさん mailto:sage [2005/10/16(日) 10:40:55 ]
>>107 関連
ttp://groups.yahoo.com/group/iolanguage/message/7156

109 名前:デフォルトの名無しさん mailto:sage [2005/10/17(月) 23:16:07 ]
d.hatena.ne.jp/epcg/
Io情報ならこのblogでいろいろ得られます。
感謝。


110 名前:デフォルトの名無しさん mailto:sage [2005/10/18(火) 02:59:22 ]
>>109
Ioもそうだが、このスレの主題のプロトタイプベース言語って言語というよりライブラリ側の特性が
言語の表層として現れるおもしろい言語なんだね。
というのはSelf,Io,NewtonScriptの3つしか比べてないのだけど核となる部分はスロットへのメッセージ転送だけであって
あとはスロットに何がつっこまれたかと言う部分の違いの方が遙かに性格の違いを表してるって感じたからなのだけどね。

クラスベースの言語だとそのシンタックスに性格が最初に現れるのとは対照的だね。

111 名前:デフォルトの名無しさん mailto:sage [2005/10/18(火) 12:01:15 ]
クラスを(狭義の)言語仕様からライブラリに追い出しただけ…という話ではなく?

112 名前:デフォルトの名無しさん mailto:sage [2005/11/03(木) 15:01:00 ]
君らそんなことよりクソ遅いメソッドディスパッチ何とかしたほうがいいよ

113 名前:デフォルトの名無しさん [2005/11/06(日) 00:51:10 ]
ごめん、質問。

CLOSについて以下のページにこんなことが書いてあって、
www.ogis-ri.co.jp/otc/hiroba/others/OORing/interview21.html
| もうひとつ、CLOS の機能なんですけど、インスタンスのクラスを実行中に
| 変えられるんですね。クラスの再定義が出来まして、古いクラスから新しい
| クラスへの変換メソッドを書いといてやると、そのインスタンスがアクセス
| された時に、その変換メソッドが走って、インスタンスが update されるんです。

すげえなあ、と思ったんだけど、こういうことはプロトタイプベース名言語
(たとえばJavaScript)なら当たり前にできるもんなの?
プロトタイプベースの言語で、存在しないスロットにアクセスしたときは、
親のスロット見に行くだけで、そこで任意の処理を動かしたりとかはできないよね?


114 名前:デフォルトの名無しさん mailto:sage [2005/11/06(日) 01:06:43 ]
CLOS 知らないんで間違ってるかもしれないけど、例えば Io だと、
存在しないスロットにアクセスしたときには forward という名前のスロットに制御が行くようになってる。

……こういう話?

115 名前:デフォルトの名無しさん mailto:sage [2005/11/06(日) 01:52:23 ]
>>113
ちゃんとしたプロトタイプベースな言語であれば普通にできる。

116 名前:113 mailto:sage [2005/11/06(日) 02:47:22 ]
>>114
了解です。forwardでそのオブジェクトに足りないスロットを追加したり
すればいいわけですね。

f21.aaa.livedoor.jp/~kizz/prog/io/_docs/IoProgrammingGuide_ja.html
| オブジェクトがメッセージに応答しないとき、そのオブジェクトが
| "forward" メソッドを持っていれば、それが呼び出される。
| 送られてくるメッセージの名前やその引数は、"thisMessage" スロットに
| 入っている Message オブジェクトから取得できる。そして parent の
| チェインの中で応答するものがあれば、そのオブジェクトにメッセージを
| 送る。

「そして」以降がよくわからんなあ。forwardが呼ばれたあとで常にparentを
呼ぶってこと?
…なんかここだけ原文ついてないし。




117 名前:デフォルトの名無しさん mailto:sage [2005/11/06(日) 10:45:22 ]
>>113
クラスの変換用の Generic Function があって,それを使って変換できる話だ
な。update-instance-for-redefined-class メソッドが起動されるのな。はじ
めてでくわした時ははビビったもんだ…なにやってんの移植性最悪だー!! とお
もったら ANSI 規格の範囲内だった。でもこれも change-class とかもメンテ
ナンス用途以外ではでくわした事ないなー普通にネットででくわすサンプルだ
と出合わないかもね


118 名前:デフォルトの名無しさん mailto:sage [2005/11/06(日) 10:58:02 ]
>>116
>forwardが呼ばれたあとで常にparentを呼ぶってこと?
ん〜。proto にも parent にもスロットが無ければ forward が呼ばれるみたい。
ただ単に文の順序が逆なだけじゃないのか?

119 名前:デフォルトの名無しさん mailto:sage [2005/11/06(日) 13:46:17 ]
新しいIoからはparent無くなるんじゃなかったっけ?
又聞きだからホントか解らんけど……

120 名前:113 mailto:sage [2005/11/06(日) 14:16:37 ]
>>118
>ん〜。proto にも parent にもスロットが無ければ forward が呼ばれるみたい。

よくわかった。ありがとう。

原文はここらしいんだけど、
www.iolanguage.com/rsync/release/Io/_docs/guide.html

該当する文はやっぱり存在しない…

121 名前:デフォルトの名無しさん mailto:sage [2005/11/06(日) 14:43:22 ]
>>119
もうない。

122 名前:118 mailto:sage [2005/11/06(日) 18:23:02 ]
>>119
ごめん。持ってた VM のバージョンが古かったみたい。

123 名前:デフォルトの名無しさん [2005/11/23(水) 15:26:47 ]
で、プロトタイプベースのメリットって何よ。

124 名前:デフォルトの名無しさん mailto:sage [2005/11/23(水) 18:25:56 ]
ぶっちゃけ言うと 『単純さ』

125 名前:デフォルトの名無しさん mailto:sage [2005/11/23(水) 21:44:53 ]
単純さって、処理系作る奴のメリットじゃね?
処理系使う側のメリットはなしか?
ちなみに、単純=学習コストが低いとはいえないだろ。
たとえば、言語として超単純なLispが特に低いとは思えない。

126 名前:デフォルトの名無しさん mailto:sage [2005/11/23(水) 21:55:44 ]
lisp が単純なのは構文だけだよ

クラスやらなんやらを全部取っ払って、どんどん単純にしてったものがプロトタイプベース
構文だけじゃなくて、概念的に単純なんだな

まあ確かに、単純=学習コストが低いとはいえないから、この単純さはメリットでもありデメリットでもあるけど。



127 名前:デフォルトの名無しさん mailto:sage [2005/11/23(水) 23:28:23 ]
プロトタイプベースのほうが、具体的にこういうことをしたいときに楽だ、
という例があれば俺も知りたい。
プロトタイプベースの俺言語作ってるんだけど、メリットが自分で説明できん w

128 名前:デフォルトの名無しさん mailto:sage [2005/11/23(水) 23:47:01 ]
むしろ、C++みたいな静的なOOPLならともかく、Rubyみたいな動的なOOPLでクラスが存在する意義ってなんだろ?

129 名前:デフォルトの名無しさん mailto:sage [2005/11/23(水) 23:48:11 ]
↓性懲りもなくCoRの例を出すやつ。それはOOなのか?そいつらはis-aなのか?つうかそれだけかよ。

130 名前:デフォルトの名無しさん [2005/11/23(水) 23:48:27 ]
プロトタイプベースのメリット 単純なので、俺言語とか作りやすい。

131 名前:デフォルトの名無しさん mailto:sage [2005/11/23(水) 23:52:51 ]
>>128
OOとしてモデリングが自然。
種類A is-a 種類B が普通。
実体A is-a 実体B なんてありえん。

犬 is-a 哺乳類 OK
ポチ is-a タマ NG

132 名前:デフォルトの名無しさん mailto:sage [2005/11/23(水) 23:56:45 ]
あ、今更だが POO にはモデリングが無いことに気付いた。モデリング無しで直接オブジェクト作ってるやん。

133 名前:デフォルトの名無しさん mailto:sage [2005/11/24(木) 00:01:57 ]
>>128
「型」の提供なんだろうなぁ

クラス宣言して、メソッド書いて、使うときにはインスタンス作ってという流れの
基本的な型があって、そういう型を組み合わせていけば複雑なこともできる。

今の主流でもあるから多くの人にも理解しやすい・使いやすい。
意義は分からないけどメリットは大きい。


134 名前:デフォルトの名無しさん mailto:sage [2005/11/24(木) 01:10:57 ]
>>130
確かに高速化とか考えなければ処理系作るの若干楽だけど、
処理系作りやすいってのをメリットと言われてもなあ。
処理系だけ作って使われない言語じゃ存在意義ないし。


135 名前:デフォルトの名無しさん mailto:sage [2005/11/24(木) 01:17:20 ]
『処理系が小さい&記述が簡単』 なら組み込み系に有利かと思った。

136 名前:デフォルトの名無しさん mailto:sage [2005/11/24(木) 01:22:17 ]
結論
 処理系使う側のメリットは茄子



137 名前:デフォルトの名無しさん mailto:sage [2005/11/24(木) 01:34:47 ]
>>135
CPUパワーもメモリも売るほどあるなら処理系作るのは楽だが、
組み込みではかえって苦労するんでは。

138 名前:デフォルトの名無しさん mailto:sage [2005/11/24(木) 01:37:05 ]
ソニーがFSKなんかそうじゃね。実際もっさり?
あと普通のアプリのマクロとか。


139 名前:デフォルトの名無しさん mailto:sage [2005/11/24(木) 05:46:51 ]
>>133
逆に、「型」なんて余計なものを考えなくていい、ってのがプロトタイプベースのメリットなのかな。
必要なときに最低限の記述をすれば動くっていう、スクリプト言語みたいな。

140 名前:デフォルトの名無しさん mailto:sage [2005/11/24(木) 10:57:41 ]
>>133が逝ってる「型」は、Typeではなく、武道の「型」とか紋切り「型」の類。
だから、考えなくていいのは、「型」があるほう。

141 名前:デフォルトの名無しさん mailto:sage [2005/11/24(木) 11:43:46 ]
>>133
「型」は「流れ」とでも翻訳した方が良さそげだね。

142 名前:デフォルトの名無しさん mailto:sage [2005/11/24(木) 18:29:44 ]
>>140
そっか、誤読。
定型の作業なら、確かに慣れれば意識しなくなりそうだね。

そうすると、プロトタイプベース側は…もっとすっきり書ける、とかかな。
大規模で複雑怪奇になると結局 traits みたいなのが欲しくなるけど、そうじゃないときも多いし。
とりあえず動かしたいものがあるときに、手早く仕上げられるっていうか。


143 名前:デフォルトの名無しさん mailto:sage [2005/11/26(土) 03:11:55 ]
このパラダイムに未来はないな

144 名前:デフォルトの名無しさん mailto:sage [2005/11/26(土) 10:18:46 ]
>>143
中身が無いんで、何故未来が無いのかを書いて欲しいんだが。


145 名前:デフォルトの名無しさん mailto:sage [2005/11/26(土) 14:13:27 ]
>>144
AJAXスレから流れてきた池沼だよ。
スルーしる。

146 名前:デフォルトの名無しさん mailto:sage [2005/11/26(土) 17:18:13 ]
>>145
がっかりだよね。




147 名前:デフォルトの名無しさん mailto:sage [2005/11/28(月) 17:20:57 ]
コンパイラ使うんならクラスベースで
インタプリタ系ならプロトタイプベースのが向くでFAじゃね?

148 名前:デフォルトの名無しさん mailto:sage [2005/11/29(火) 21:14:50 ]
JavaScriptって厳密に言えばプロトタイプベースじゃないよね?

149 名前:デフォルトの名無しさん mailto:sage [2005/11/29(火) 21:39:27 ]
プロトタイプベースの定義を適用すると当てはまると思うんだが、何がイカンと思うわけ?>>148


150 名前:デフォルトの名無しさん mailto:sage [2005/11/30(水) 01:20:54 ]
clone じゃなくてコンストラクタでオブジェクトを作るから?
オブジェクト自体のprototypeを自由に出来ないから、とか?
クラス、とか新しく入ってきたから、とか?

151 名前:148 mailto:sage [2005/12/07(水) 22:40:09 ]
>>150
JavaScript2.0のことは知らないけど、上の2行についてはそんな感じ。


152 名前:デフォルトの名無しさん mailto:sage [2005/12/08(木) 00:43:51 ]
"The Power of Simplicity" の Powerってどんな力?

153 名前:デフォルトの名無しさん mailto:sage [2005/12/19(月) 18:14:06 ]
シンプルな脳みそのやつを怒らすと怖いってことだろ。

154 名前:デフォルトの名無しさん mailto:sage [2005/12/20(火) 09:35:11 ]
>>152
継続は力なり、の力と同じような力

155 名前:デフォルトの名無しさん mailto:sage [2005/12/20(火) 12:08:42 ]
Emacsのio-mode発見しますた。
とりあえずカラフルになった。

ttp://www.alcyone.com/software/io-mode/io-mode.el


156 名前:デフォルトの名無しさん [2006/01/26(木) 01:36:33 ]
プロトタイプ指向を簡単に実装できそうな既存の言語って何だろ。




157 名前:デフォルトの名無しさん mailto:sage [2006/01/26(木) 01:50:38 ]
>>156
Lisp

158 名前:デフォルトの名無しさん [2006/01/26(木) 02:17:10 ]
>>154
積もった塵ですか

159 名前:デフォルトの名無しさん mailto:sage [2006/01/26(木) 02:20:32 ]
>>156
GC があって、構文を弄る仕組み(マクロとか)がある言語だと楽そうね。
Dylan とか。

160 名前:デフォルトの名無しさん mailto:sage [2006/01/26(木) 09:06:21 ]
>>156
FORTH

161 名前:デフォルトの名無しさん [2006/03/02(木) 02:47:21 ]
これぞプロトタイプベース!っていうコードってどんなの?
ベタなChain of responsibility以外で。

162 名前:デフォルトの名無しさん mailto:sage [2006/03/02(木) 09:51:04 ]
>>161
根底のObjectに後から何かつっこんで全部の階層から使えるとか(w


163 名前:デフォルトの名無しさん mailto:sage [2006/03/02(木) 10:01:55 ]
それって、クラスベースでも動的言語ならObjectクラスにあとから追加とか出来るじゃん。

ただ、ネームスペースがしっかりてない言語でこれは勘弁して欲しい。
メンバを舐めてる処理が突如おかしくなるw

164 名前:デフォルトの名無しさん mailto:sage [2006/03/02(木) 10:11:34 ]
>>163
JavaScriptで良くあるんだよね orz


165 名前:デフォルトの名無しさん mailto:sage [2006/03/03(金) 00:54:28 ]
>>162
静的言語でも極一部(MixJuiceやDelphiや字面上だけならC#3.0も)はできるぞ

166 名前:デフォルトの名無しさん mailto:sage [2006/03/03(金) 11:30:15 ]
(内部的にも)新規にクラスを作ったり、そうしたものを介したりせずに…という
“しばり”を設けたら、どうよ…。



167 名前:デフォルトの名無しさん [2006/03/03(金) 14:25:52 ]
縛る意味が分からない。マニアの方ですか?

168 名前:デフォルトの名無しさん mailto:sage [2006/03/03(金) 23:12:50 ]
あえて縛りを設けることで、頭の弱い奴が同一視するものとの違いを際だたせる
ことができるってことだろ。まあ、そんな程度じゃ馬鹿の壁は越えられんのだが。

169 名前:デフォルトの名無しさん mailto:sage [2006/03/03(金) 23:19:22 ]
と、バカが申しておりますが、どないしますか?

170 名前:デフォルトの名無しさん mailto:sage [2006/03/05(日) 22:29:01 ]
たしかにクラスの助けを借りずにインスタンスが独自のスロットを持てるのは
いっけん効率いいようにおもえるけど、そもそもベーサルで効率悪いシステムだから
なぁ…。びみょー。

171 名前:デフォルトの名無しさん mailto:sage [2006/06/05(月) 00:17:54 ]
 

172 名前:デフォルトの名無しさん mailto:sage [2006/06/10(土) 05:43:29 ]
プロトタイプ言語って、メソッドはプロトタイプ毎に保持しているんだよね?

173 名前:デフォルトの名無しさん mailto:sage [2006/06/10(土) 08:41:00 ]
>>172
そういうこともするが、それだけとは限らない。

174 名前:デフォルトの名無しさん mailto:sage [2006/06/10(土) 11:02:53 ]
他のプロトタイプに委譲することも多いよね。

175 名前:デフォルトの名無しさん mailto:sage [2006/06/10(土) 11:28:24 ]
つか、自分で持つか委譲しかないんだが…。

176 名前:デフォルトの名無しさん mailto:sage [2006/06/10(土) 16:44:49 ]
・共有する
・コピーする
つうのもあるよ。




177 名前:デフォルトの名無しさん mailto:sage [2006/06/10(土) 20:54:41 ]
>>176
共有する … 委譲
コピーする … 自分で持つ

178 名前:デフォルトの名無しさん mailto:sage [2006/06/11(日) 02:00:59 ]
共有する->所有権あり
委譲する->所有権なし

コピーする->オリジナルが存在
自分でもつ->オリジナルの有無は不明

つう感じかね。

179 名前:デフォルトの名無しさん mailto:sage [2006/06/11(日) 10:04:42 ]
いずれにせよ、委譲するか、その必要がないかに帰着できる。

180 名前:176 mailto:sage [2006/06/11(日) 14:37:11 ]
だからそれだけじゃ足りないんだって。
委譲するかどうかだけではリソースの扱いを決定できないんだって。

委譲しない(=自分が所有権を持つ)としても、もし他と共有するとなるとそのリソース
(メソッド)を勝手に加工できないから、それなりの扱いが必要でしょ

コピーするかどうかは、初期化の場面しか関係しないけどな。


181 名前:デフォルトの名無しさん mailto:sage [2006/06/11(日) 18:29:11 ]
それは小手先に過ぎなくて、なんというか本質から外れているような。

182 名前:デフォルトの名無しさん mailto:sage [2006/06/11(日) 19:07:05 ]
ああ。なんか分かってきたぞ。

176は、継承(あるいはインスタンス化、もしくはクローン化)の様式を整理したいのか。
それならコピーがどうのこうのってのも分かる。
たしかに、委譲の他に、手続きを共有する方法と、コピーを持ってしまう方法がある。

まあ、172がそもそも何を聞きたいのかわからんというのが問題なのだが…。
「プロトタイプ毎」というのはおかしいから「プロトタイプ(ベースの)言語」のプロトタイプに
引っ張られて「オブジェクト毎」とするところを書き(あるいは理解し)間違えたと解釈して、

「オブジェクト毎にメソッドを持つかどうか」

と問われているとすれば、そういうこともあるし他者に委譲することもある、と答えるし、そうではなく、

「クローン(多くの場合チャイルド)はプロトタイプ(多くの場合ペアレント)にメソッドを持たせるのか」

と問うているのならば、それ、つまり、委譲機構以外にも自前でコピーで持ったり(クローン、コピー)、
プロトタイプと共有する(シャローコピー)のこともある、という176のような答になる。

183 名前:172 mailto:sage [2006/06/11(日) 19:45:16 ]
スンマせん。過疎スレだったので、ちゃんと整理せずに軽い気持ちで書き込みますた。

プロトタイプ言語のインタープリタを作る時に、メソッドの一覧は何処に持たせるのが
良いのかなというのが最初の疑問です。

何処に?
・グローバルに 1 つ
・メソッド名毎に 1 つ(ジェネリックな感じで)
・オブジェクト毎(プロトタイプもオブジェクトに含む)

どういう形式で?
・リスト
・ハッシュ

クラスベースな言語なら、クラス毎にハッシュでメソッドリストを持たせてもそんなに
オーバーヘッドな感じはしないですが、プロトタイプ言語でオブジェクト毎にハッシュを
持たせたら、個々のオブジェクトのサイズが大変な事になりそうで。

今考えているのは、オブジェクト毎にメソッドのリストを持たせて、グローバルにハッシュで
キャッシュを持つ感じです。io なり javascript なりの実装を調べてみます。

184 名前:デフォルトの名無しさん mailto:sage [2006/06/11(日) 19:57:27 ]
>>183
最初からそう言えや (´・ω・`)

例えば io はオブジェクト毎にハッシュテーブルを1つ持ってる。
他は知らないけど。


ちなみに 『プロトタイプもオブジェクトに含む』 みたいな文が出てくる時点で、
あまりプロトタイプベースについて詳しくないんじゃないかなとか予想してたり。

185 名前:172 mailto:sage [2006/06/11(日) 20:14:36 ]
>>184
重ね重ねスミマセン。

プロトタイプは、単に他のオブジェクトのプロトタイプスロットから参照されているだけで、
実態は普通のオブジェクトだと思ってました。

186 名前:更紗 ◆SARAHxmkr. mailto:sage [2006/06/15(木) 04:23:03 ]
// 継承前
function Person(nAge) {
this.m_nAge = nAge;
}

Person.prototype.getAge = function() {
return this.m_nAge;
};

// 継承先
function Programmer(nAge, strProject) {
this.__super = Person; // 新インスタンスを介して
this.__super(nAge); // 継承元コンストラクタを呼ぶ
this.constructor = Programmer; // コンストラクタが Person にセットされるので元に戻す
delete this.__super;
/* Programmer コンストラクタの処理 */
}

// 継承先の方法2つ目
function Programmer(nAge, strProject) {
Person.call(this, nAge);
this.constructor = Programmer;
/* Programmer コンストラクタの処理 */
}
このコードでPersonのプロパティをProgrammerのプロパティで継承する際に、
Person(nAge)として、親のコンストラクタを呼んで
値を初期化せずに、スコープを変更して呼びしているのは、
そうしないと、値へのアクセスがインスタンスを介して出来なくなるからですか?
いまひとつ変数のスコープが理解できません。
Personクラスのthis.m_nAge = nAge;を呼び出しても、
インスタンスがthisに入るので、インスタンスの変数としてm_nAgeが初期化され
そうに思えてしまいます。



187 名前:更紗 ◆SARAHxmkr. [2006/06/15(木) 04:24:59 ]
 

188 名前:デフォルトの名無しさん mailto:sage [2006/06/15(木) 15:47:53 ]
>>186
this には、その関数を起動する際の第一オペランド(ドット演算子の前にあるオブジェクト)が束縛されています。
メッセージングメタファで言えば、メッセージの受け手であるレシーバですね。(どちらでも、お好きな方で)

new Programmer(21, "EJS"); で起動された Programmer 内において、this には、新しく作られたインスタンス
(ここでは仮に this_prog と呼称することにします)が束縛されています。その場で this.__super(nAge); により
起動、つまり、this_prog.__super(nAge) で起動された Person 内では、this は this_prog を束縛することになります。

ですから、Person 内の this.m_nAge = nAge; は、つまり this_prog.m_nAge への nAge の束縛ということに
なるので、戻ってくると新しく作ったインスタンスの m_nAge スロットには 21 が束縛されている…というカラクリです。

もし、__super スロットを介さずに、ただ Person を起動しただけでは、第一オペランドが省略時のグローバル
オブジェクト [object global] になってしまうので、Person 内の this もそうなってしまい、m_nAge スロットも
グローバルオブジェクトに作られてしまいます。

189 名前:デフォルトの名無しさん mailto:sage [2006/06/15(木) 22:53:19 ]
>>188
なるほど、そういう風に規定されているのですね。
勉強不足ですいません・・・ありがとうございます

190 名前:更紗 ◆SARAHxmkr. mailto:sage [2006/06/15(木) 23:22:21 ]
>>612
// 継承前
function Person(nAge) {
this.m_nAge = nAge;
}

Person.prototype.getAge = function() {
return this.m_nAge;
};

// 継承先
function Programmer(nAge, strProject) {
this.__super = Person; // 新インスタンスを介して
this.__super(nAge); // 継承元コンストラクタを呼ぶ
this.constructor = Programmer; // コンストラクタが Person にセットされるので元に戻す
delete this.__super;
/* Programmer コンストラクタの処理 */
}

// 継承先の方法2つ目
function Programmer(nAge, strProject) {
Person.call(this, nAge);
this.constructor = Programmer;
/* Programmer コンストラクタの処理 */
}

まあ、これなんだけどね。
Person.call(this, nAge);
ここが何でこうなるんだろうと凄く不思議に思った。
prototype.jsはどうやってクラスみたいな仕組みを実装してるんだろうか。


191 名前:更紗 ◆SARAHxmkr. mailto:sage [2006/06/15(木) 23:23:16 ]
すいません・・・誤爆しました。。
きにしないでください

192 名前:デフォルトの名無しさん [2006/10/09(月) 11:42:23 ]
prototypeのAjax.UpdaterってFireFoxで動かない?
evalScripts:trueで使いたいんだけど、どうも動かない。既出?

193 名前:デフォルトの名無しさん mailto:sage [2006/10/09(月) 12:28:20 ]
>>192
板違い。こっち池。
+ JavaScript の質問用スレッド vol.51 +
pc8.2ch.net/test/read.cgi/hp/1158468856/

194 名前:デフォルトの名無しさん mailto:sage [2006/10/09(月) 12:34:58 ]
>>193
あああ・・・そっちもスレ違いなので変なの誘導しないで・・・

195 名前:デフォルトの名無しさん [2006/12/10(日) 01:29:51 ]
JavaScriptは大流行りなのに、こっちは寂れてしまったな

196 名前:デフォルトの名無しさん mailto:sage [2006/12/10(日) 01:39:01 ]
>>195
でもその話しちゃうと現場での愚痴大会になっちゃうからなぁ。




197 名前:デフォルトの名無しさん mailto:sage [2006/12/10(日) 01:48:43 ]
寂れてもチェックは欠かさない

198 名前:デフォルトの名無しさん mailto:sage [2006/12/10(日) 13:43:52 ]
JavaScriptでもプロトタイプ継承をバリバリ使ってるやつは例外中の例外だろ

199 名前:デフォルトの名無しさん mailto:sage [2007/01/04(木) 23:05:10 ]
冬休み中にself似の言語にnative型の概念入れようと努力したけどムリポ







[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧](*・∀・)<45KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef