@@hasInstanceが実装された
概要
インスタンスであるか判定するためのビルトインシンボルが実装された。
解説
instanceof演算子が「 obj instanceof C 」の形で使われると、「 C[@@hasInstance] 」が定義されていた場合objを引数に呼ばれ、それが返す真偽値が返される。
class X { } class A { static [Symbol.hasInstance](obj) { return obj.constructor == X } } let a = new A, x = new X console.log( a instanceof A ) // false console.log( x instanceof A ) // true
ちょっと変わった利用例
型判定に使う
const StringOrNumber = { [Symbol.hasInstance](v) { return /String|Number/.test( Object.prototype.toString.call(v) ) } } 'str' instanceof StringOrNumber // true 12345 instanceof StringOrNumber // ture Object('str') instanceof StringOrNumber // true Object(12345) instanceof StringOrNumber // true
const ArrayCoercible = { [Symbol.hasInstance](v) { return Object(v) == v && ( 0 <= +v.length || v[Symbol.iterator] ) } }
実装されるバージョン
V8 5.0.43