class は参照渡しか

class は参照渡しか

2017.07.12

関数が実体渡しに見えたけれども、本当はどうなんだろうと思って。

Object.prototype.toString.call(class Some {}) しても、返ってくるのは [object Function] だからなーと思いつつ。

結果を見ると、「コピーしているように見えて、そういうわけでもない。」という感じに見えて、なんだか複雑に見えるけど、そういうわけでもない。

「class Origin」も「Copy」も、「{ constructor(_str){} ....}」 という名前の決まっていない object への参照なのである。

ファイルシステムで例えるなら、同じファイルへのショートカット名が Origin か Copy かという違いなので、Copy.prototype.sing を書き換えると、同じファイルを参照している Origin.prototype.sing に影響が出るのは当然である、ということだ。Origin を undefined にするということは、つまり、今までショートカットファイルだった Origin を、正体不明のファイル Origin に書き換えている、ということなのであると思う感じみたいな。

まぁ、詰まる所(詰まる所さん?! マズイですよ…)、function として使う分にはコピー感覚で良いけど、そうでもない(class として扱う)ならちゃんと class extends しなさいよ。ということだと思う。