この記事は編集レビューを必要としています。ぜひご協力ください。
これは Harmony(ECMAScript 6) 提案の一部であり、実験段階の技術です。
この技術の仕様は安定していません。ブラウザ互換性の一覧表を確認してください。またこれらの構文や動作は、仕様変更などにより、新しいバージョンのブラウザでは変更される可能性があるという点に注意してください。
よく知られたSymbol.species
シンボルは派生したオブジェクトを作成するために使用されるコンストラクタ関数である関数の値を持つプロパティを指定します。
Symbol.species のプロパテイ属性 |
|
---|---|
書込可能 | 不可 |
列挙可能 | 不可 |
設定可能 | 不可 |
説明
species アクセサプロパティを使うと、オブジェクトの生成に使われるデフォルトコンストラクタを上書きすることができます。
例
派生クラス MyArray
で Array
オブジェクトを返すことを考えます。デフォルトコンストラクタを使う map()
のようなメソッドを使う際、これらのメソッドが MyArray オブジェクトではなく親の Array オブジェクトを返すようにしたいでしょう。species シンボルを使うと次のように実現できます。
class MyArray extends Array {
// speciesを親のArrayコンストラクタで上書きする
static get [Symbol.species]() { return Array; }
}
var a = new MyArray(1,2,3);
var mapped = a.map(x => x * x);
console.log(mapped instanceof MyArray); // false
console.log(mapped instanceof Array); // true
仕様
仕様 | 状況 | コメント |
---|---|---|
ECMAScript 2015 (6th Edition, ECMA-262) Symbol.species の定義 |
標準 | Initial definition. |
ECMAScript 2017 Draft (ECMA-262) Symbol.species の定義 |
ドラフト |
ブラウザ実装状況
機能 | Chrome | Firefox (Gecko) | Internet Explorer | Opera | Safari |
---|---|---|---|---|---|
基本サポート | 未サポート | 41 (41) | 未サポート | 未サポート | 未サポート |
機能 | Android | Chrome for Android | Firefox Mobile (Gecko) | IE Mobile | Opera Mobile | Safari Mobile |
---|---|---|---|---|---|---|
基本サポート | 未サポート | 未サポート | 41.0 (41) | 未サポート | 未サポート | 未サポート |