ES2015からclass extendsを使うことでクラスを継承することができます。

今まではビルトインのArrayErrorの継承は内部プロパティを引き継ぐことができませんでした。

ES2015からはclass extendsを使うと内部プロパティも含め継承できます。 lengthプロパティの動作も継承できています。

class SubArray extends Array {
  last(){
    return this[this.length - 1];
  }
}
var array = new SubArray(1,2,3);
array.push("x");
console.log(array.last()); // => "x"
console.log(array.length); // => 4
console.log(array instanceof Array); // => true
console.log(array.join()); // => "1,2,3,x"
array[10] = "no such item";
console.log(array.length); // => 11

内部的にはprototypeであることには変わらないので、classという新しい構文を使わなくても同じ表現をすることがES2015からは可能です。(新しい構文じゃなくて関数的な書き方でできるという話)

function SubArray() {
  return Reflect.construct(Array, arguments, SubArray)
}
SubArray.prototype.last = function(){
  return this[this.length - 1];
}
Reflect.setPrototypeOf(SubArray.prototype, Array.prototype);
Reflect.setPrototypeOf(SubArray, Array);
var array = new SubArray(1,2,3);
array.push("x");
console.log(array.last()); // => "x"
console.log(array.length); // => 4
console.log(array instanceof Array); // => true
console.log(array.join()); // => "1,2,3,x"
array[10] = "no such item";
console.log(array.length); // => 11

Reflect.constructを使うことでlengthプロパティの特殊な動きもちゃんと継承できています。