JavaScript情報交換所(プログラミング既習者専用) [無断転載禁止]©2ch.net (766レス)
JavaScript情報交換所(プログラミング既習者専用) [無断転載禁止]©2ch.net http://mevius.5ch.net/test/read.cgi/tech/1449440793/
上
下
前次
1-
新
通常表示
512バイト分割
レス栞
抽出解除
レス栞
リロード規制
です。10分ほどで解除するので、
他のブラウザ
へ避難してください。
336: デフォルトの名無しさん [sage] 2016/07/19(火) 02:25:00.57 ID:9Xihfq37 相変わらずアスペ全開だな。 まあついでに言っておくと、JavaScriptの連中は仕様書を書いている連中すらゴミだってことだ。 オブジェクト指向を理解出来てない。 Type固有の案件は全部15章に突っ込まないと駄目だ。 11章の演算子(+)に書くとか、親クラスのメソッドに子クラス毎にif文入れているようなものだ。 あの仕様書では頭からお尻まで全部読まないと理解できない。典型的な駄目コードだ。 だから俺も読み込むまでに余分に時間がかかった。 var Object = { operator+: funciton() { if (typeof(this)==='Date') // 11.6.1 NOTE1 // 現行仕様書 }}; var Date = { operator+: function() { // 15.9.X // こっちに書くべき }}; Type固有の例外規定が15章に書いてない時点で仕様書の構造がゴミ。 但し書きはダブって良いので、15章にも書き、そっちがオリジナルであるべき。 上記上側みたいに、Dateオブジェクトの特別扱いを、子クラスでメソッドをオーバライドせず、 親クラスのメソッドにいちいちif文入れてこられたらキレるだろ? 上記下側のように、子クラスでオーバライドした上で、 親クラスのメソッドに「Date型ではオーバライドされています」とコメントを付けておくべき。 http://mevius.5ch.net/test/read.cgi/tech/1449440793/336
341: デフォルトの名無しさん [sage] 2016/07/19(火) 04:57:24.04 ID:gHzhdyCj Dateにoperator+を書くべきじゃないと言ったが、 もちろんObjectにも書くべきじゃない。 >>336はさも、Objectにoperator+があるのが 現行の仕様だと言っているが、現行の仕様は Objectにoperator+なんてものは存在しない。 ObjectにあるのはvalueOfメソッドだ。 そしてObjectのvalueOfメソッドに if Dateなら?みたいなコードはない。 Operator+解釈のアルゴリズムの結果、Date型のvalueOfメソッドが呼ばれるだけだ。 Operator+の処理が実行されるのは、Object(やDate)のメソッドが呼び出される前だ。 それは仕様を読めばわかること。 だからこそ15章 Native ECMAScript objects ではなく、 11章 Expressions に分離して書かれているのだ。 http://mevius.5ch.net/test/read.cgi/tech/1449440793/341
342: デフォルトの名無しさん [sage] 2016/07/19(火) 09:44:05.11 ID:Lmd4i1Ew >>336 仕様書が変に構造化されてて読みにくいのは非常にその通り。 でもES2015以降徐々に改善されて行ってるよ。 そういう意味でも最新の仕様書を読んだほうが良い。 で、確かに@@toPrimitiveはビルトインではDateとSymbolくらいにしかついていないので特有だが、 別にこれは外したり自由に付けたりもできるし、処理の流れの中で例外というわけでもない。 http://mevius.5ch.net/test/read.cgi/tech/1449440793/342
346: デフォルトの名無しさん [sage] 2016/07/20(水) 02:05:37.37 ID:eZynd/Sj >>342 > 処理の流れの中で例外というわけでもない 俺が言っているのは、ToPrimitiveを呼ぶことではなくて、 ToPrimitiveのデフォルト値がTypeによって異なっていることだ。 ただしこれについては俺も>>336内では間違っていた。正確には以下。 var Object = { ToPrimitive: funciton(hint) { // 9.1 if (typeof(this)==='Date') // 11.6.1 NOTE1 // ES5.1仕様書 }}; つまり、15.9 に書くべき内容が、次点の 9.1 にも書いてなくて、 11.6.1 に書いてある。 二重に落とし穴になっている。 そして、当たり前だがNOTE1が例外だと言っている。 というか例外じゃなければNOTEの意味無いだろ。 仕様書のおかしな構造は、おそらく仕様書それ自体を書いたわけではなくて、実装から起こしたからだ。 だから仕様書として妥当な場所ではなく、それが実装してある場所に記述があるのだろう。 とはいえその場合でもこのNOTE1の内容なら 9.1 にあるべきであって、 いずれにしても 11.6.1 にあるのはかなり謎なのだが。 そして、実装から起こすにしても、まともな実装ならそのまま仕様書に焼き直しても上手く行く。 いずれにしてもアレなんだろうさ。 NOTE1(仮): Dateの場合はhintにStringを与えて呼び出す // 11.6.1 にあっても不思議ではない、 // 336の俺の勘違いはこれ、11.6.1にある点と整合させる為に脳内変換してしまった NOTE1(ES5.1仕様書): ToPrimitiveはhint無しの場合、 Date以外はNumberが、 DateはStringがhintに与えられたものと見なす // ToPrimitiveの動作説明を(+)の説明内に配置?意味不明 // しかもToPrimitiveの場所(9.1)にはこの説明は無しかよ!マジで頭おかしい http://mevius.5ch.net/test/read.cgi/tech/1449440793/346
メモ帳
(0/65535文字)
上
下
前次
1-
新
書
関
写
板
覧
索
設
栞
歴
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.047s