これは Harmony(ECMAScript 2015 (ES6)) の一部です。
この技術の仕様は最終化されていますが、使用にあたってはブラウザーごとの実装状況の一覧表を確認してください。

よく知られた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 Latest Draft (ECMA-262)
Symbol.species の定義
ドラフト  

ブラウザ実装状況

We're converting our compatibility data into a machine-readable JSON format. This compatibility table still uses the old format, because we haven't yet converted the data it contains. Find out how you can help!

機能 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) 未サポート 未サポート 未サポート

関連情報

ドキュメントのタグと貢献者

 このページの貢献者: unarist, shide55
 最終更新者: unarist,