Skip to content

Commit

Permalink
2024/07/15 時点の英語版に基づき更新
Browse files Browse the repository at this point in the history
  • Loading branch information
mfuji09 committed Sep 11, 2024
1 parent 414becf commit d64a0e2
Showing 1 changed file with 22 additions and 4 deletions.
Original file line number Diff line number Diff line change
@@ -1,13 +1,30 @@
---
title: Symbol.hasInstance
slug: Web/JavaScript/Reference/Global_Objects/Symbol/hasInstance
l10n:
sourceCommit: 6fbdb78c1362fae31fbd545f4b2d9c51987a6bca
---

{{JSRef}}

**`Symbol.hasInstance`** は、コンストラクターオブジェクトが、そのインスタンスのオブジェクトとして認識されるかどうかを決定するために使用されます。このシンボルで、{{jsxref("Operators/instanceof", "instanceof")}} 演算子の動作をカスタマイズすることができます
**`Symbol.hasInstance`** は静的データプロパティで、[ウェルノウンシンボル](/ja/docs/Web/JavaScript/Reference/Global_Objects/Symbol#ウェルノウンシンボル)である `Symbol.hasInstance` を表します。{{jsxref("Operators/instanceof", "instanceof")}} 演算子は右辺オペランドに対して、コンストラクターオブジェクトがオブジェクトをそのインスタンスとして認識するかどうかを判断する際に使用されるメソッドを、このシンボルで探します

{{EmbedInteractiveExample("pages/js/symbol-hasinstance.html")}}{{js_property_attributes(0,0,0)}}
{{EmbedInteractiveExample("pages/js/symbol-hasinstance.html")}}

##

ウェルノウンシンボル `Symbol.hasInstance` です。

{{js_property_attributes(0, 0, 0)}}

## 解説

`instanceof` 演算子は、`object instanceof constructor` の返値を計算するために以下のアルゴリズムを使用します。

1. `constructor``[Symbol.hasInstance]()` メソッドがあった場合、`object` を最初のオブジェクトとして呼び出し、結果を[論理値に変換](/ja/docs/Web/JavaScript/Reference/Global_Objects/Boolean##論理値への型強制)して返します。`constructor` がオブジェクトでない場合、または `constructor[Symbol.hasInstance]``null``undefined`、関数のいずれでもでない場合、{{jsxref("TypeError")}} が発生します。
2. それ以外の場合、`constructor``[Symbol.hasInstance]()` メソッドがない場合(`constructor[Symbol.hasInstance]``null` または `undefined`)、 [`Function.prototype[Symbol.hasInstance]()`](/ja/docs/Web/JavaScript/Reference/Global_Objects/Function/Symbol.hasInstance) と同じアルゴリズムを使用して結果を決定します。`constructor` が関数でない場合、{{jsxref("TypeError")}} が発生します。

Because all functions inherit from `Function.prototype` by default, most of the time, the [`Function.prototype[Symbol.hasInstance]()`](/ja/docs/Web/JavaScript/Reference/Global_Objects/Function/Symbol.hasInstance) method specifies the behavior of `instanceof` when the right-hand side is a function.

##

Expand All @@ -27,7 +44,7 @@ console.log([] instanceof MyArray); // true
```js
function MyArray() {}
Object.defineProperty(MyArray, Symbol.hasInstance, {
value: function (instance) {
value(instance) {
return Array.isArray(instance);
},
});
Expand All @@ -48,7 +65,7 @@ const cat = new Animal();
console.log(Animal[Symbol.hasInstance](cat)); // true
```

## 仕様
## 仕様書

{{Specifications}}

Expand All @@ -59,3 +76,4 @@ console.log(Animal[Symbol.hasInstance](cat)); // true
## 関連情報

- {{jsxref("Operators/instanceof", "instanceof")}}
- [`Function.prototype[Symbol.hasInstance]()`](/ja/docs/Web/JavaScript/Reference/Global_Objects/Function/Symbol.hasInstance)

0 comments on commit d64a0e2

Please sign in to comment.