akasaka_34の日記

ネトウヨと呼ばれた男の日記。しかし頻度から言えば週報ぐらい。

JavaScriptのprototypeとcopy-on-write

よく考えてみりゃJavaScriptのprototypeってほとんどcopy-on-writeだよね。
「ほとんど」ってのはコピー元を書き換えればコピー先にも反映されちゃうってこと。

これが完全なcopy-on-writeならば
「JavaScriptには継承なんてものはありません。
コピーして上書きすれば、あとはダックタイプでなんとかなります」
って言えば済むものが
「JavaScriptはプロトタイプベースのオブジェクト指向で(以下略)」
になる。
せめてコピー元を書き換え禁止にすればすっきりするのに。

完全なcopy-on-writeではない意義って何だろう?
prototype側の変更が他に影響する事を活用したコードってありうるだろうか?

実世界にあるものでJavaScriptのprototypeに似ているものといえば
例えば法律だと思う。
日本の法律は東京都でも有効だけど、東京都には東京都の条例もある。
日本の法律が変更されれば、それは東京都にも反映される。

あるいはHTMLのタグ。
あるタグでフォントを設定すれば
上書きされない限り子供の要素でもそのフォント設定が有効。

なんか一瞬役に立つ気がしたけど、
リスナによる通知とか一切無しで値だけ変えられても困るよな。

いろいろ考えてみたが、普通のcopy-on-writeの方が便利だと思う。
なんか僕が思いつかないような深い理由でもあるのか?