JavaScriptで、Hoge instanceof Hoge が成り立つオブジェクトを作る

MozillaのJavaScriptエンジンはStopIterationというオブジェクトを持っている。

try {
  throw StopIteration;
} catch (e if e instanceof StopIteration) {
}

興味深いのは、このStopIterationというオブジェクトについて、StopIteration instanceof StopIteration === trueが成り立つことだ。このような性質を持つオブジェクトを自分で作り出すことはできるのだろうか?

できる。__proto__があれば。

// Firefox、Safari、Chrome、Operaで動作を確認
var f = function(){};
f.__proto__ = f.prototype;
f instanceof f; // ⇒ true

ただし、このfとStopIterationとでは、typeofした時の値(typeof StopIterationはobject)と、呼べるかどうかが異なる。

スポンサーサイト



テーマ : プログラミング | ジャンル : コンピュータ

コメントの投稿

非公開コメント

プロフィール

minoki

Author:minoki
好きなプログラミング言語:
Haskell,Lua
GitHubアカウント
Twitter

最新記事
月別アーカイブ
カテゴリ
検索フォーム