1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

classとextendsで組み込みクラスを拡張させる

Last updated at Posted at 2024-03-23

ES6からArrayのような組み込みクラスに足して堅牢なサブクラスを作成でき、classとextendsを使用します。

class EZArray extends Array {
  get first() { return this[0] }
  get last() { return this[this.length - 1] }
}

let e = new EZArray(1, 2, 3)
let f = e.map(x => x * x)
e.last  // => 3
f.last  // => 9

Arrayにはcontact()、filter()、map()、slice()、splice()というメソッドが定義されています。ES6の仕様では、この5つの配列を返すメソッドはサブクラスのインスタンスを返すとされています。仕組みは以下の通りです。

  • ES6以降では、Array()コンスラクタはSynbol.spaciesというSymbol名のプロパティを持つ
  • extendsを使ってサブラクスを作るときに、結果として得られるサブクラスのコンストラクタは、スーパークラスのコンストラクタからプロパティを継承する
  • map()やslice()のように、新しい配列を作成して、この配列を返すメソッドは、ES6以降では通常のArrayを作成するのではなく、新しい配列を作成するためにnew this.constructor[Symbol.species] ()を呼び出す

参考

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?