Skip to content

Instantly share code, notes, and snippets.

@azu
Last active November 29, 2018 11:01
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save azu/6d717c6410deb9eec19be65e1714c546 to your computer and use it in GitHub Desktop.
Save azu/6d717c6410deb9eec19be65e1714c546 to your computer and use it in GitHub Desktop.
JavaScriptの概念たち (後編)

さて、実は全てのオブジェクトにはprototypeというプロパティが存在しています。

Object.create(null)で prototypeを持たないオブジェクトを作れるという反例が一応あります。 趣旨的には例外的な存在なので、注釈とかあるといいかなぐらいです。

17で書いたようなObject.create(null)で使うのはたまに見るかな(ライブラリとかNode.jsの内部とかで)という感じですが、これも一応class A extends nullという感じで同じ表現できるんですね。

仕様的な側面からいうと、構文(class構文)でできることは関数(Object.createReflect.constructなど)でできるようにデザインされていることが殆どですね。 なので、使い手によって自由に使うものを選んでくださいという感じになっています。

多くの人にとってはclass構文のほうが読みやすいと思います ぐらいだと、関数スタイルが好きな人にとってもFUDに取られなくなると思います。

参照が弱くなったおかげでWeakMapからオブジェクトへの参照が存在しないため、上記の※時点でもともとのobj2のメモリを解放することができます。

少し解説が変?

deleteのケースはMapと同じなので、WeakMapの解説ではないかも。 obj2のケースは、WeakMapはkeyの参照をweakに保持するため、keyだったobj2がどこからも参照されなくなった時点で、WeakMapからも開放できるという感じな気がする。

参照が弱くなったおかげでWeakMapからオブジェクトへの参照が存在しないため

WeakMapからのweakな参照としてkey(obj2)への参照は一応あるはずです。この参照がkeyとなるobj2がどこからも参照されなくなった(GC可能)なときに、WeakMapからも消えるという感じだと思います。 ちょっと文章から読み取ることができなかったです。

自作classの名前が欲しい時はgetPrototypeOf().constructor.nameなんかが良いんじゃないかと今思いつきましたがどうなんでしょうか。

一応とれはするのですが、多くのアプリケーションコード(特にブラウザ)はminifyが前提になっているので、.nameで取れる名前もminifyされて意図通りにならないという問題がよく発生します。

なお、async awaitでは.catch()の代わりにtry ~ catch構文を使用します。

async関数においてtry/catchではなくawait/catchパターンを活用する - Qiitaというパターンをやってる人もいますね。 まだプラクティスがちゃんと決まってないからかもしれなですね。

try ~ catch構文を使用できます。

とかでもいいかもしれないですね。

その他

コードスタイル的な話になってしまうのですが、演算子や=>とかの前後はスペースを空けたほうが、構文を見慣れていない人にとっても読みやすくなると思います。(見慣れていないとどこに区切りがあるかがつかめない)

const count = arr.reduce((acc, cur)=>acc+(cur.match(//g)||[]).length, 0);

->

const count = arr.reduce((acc, cur) => acc + (cur.match(//g)||[]).length, 0);

ものすごく雑にやるなら、prettierとかを一度記事に対してかけてしまうとか。 (余計なかっことか増えそうですが、統一感はでる)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment