2017-01-27 14 views
1

Matrix4という名前のクラスを作成して、Float32Arrayに拡張したいとします。私はFloat32Arrayのコンストラクタを16要素の配列を作成するコンストラクタでオーバーライドできるようにしたいと考えています(普通はnew Float32Array(16)を呼び出すでしょうが、現在はnew Matrix4が必要です)。Arrayクラスを拡張するときにコンストラクタをオーバーライドするにはどうすればよいですか?

// This function should override the Float32Array constructor 
// And create a Matrix4 object with the size of 16 elements 
var Matrix4 = function() { 
    Float32Array.call(this, 16); 
}; 

Matrix4.prototype = new Float32Array; 

私はこのコードから取得するエラーは次のとおりです。

Constructor Float32Array requires 'new'

+0

まあ...私はそのエラーを取得しません。私は '[]'を得る。エラーがあなたのコードのどこか他の場所から来た可能性はありますか? – jmargolisvt

答えて

2

あなたは昔ながらの事前ES6の構文を使用してArrayFloat32Arrayのような組み込みのオブジェクトを拡張することはできません。それを行う唯一の方法は、a class..extends statementとなります。

class Matrix4 extends Float32Array { 
    constructor() { 
     super(16); 
    } 
} 

let matrix = new Matrix4; 
console.log(matrix.length); // 16 
+0

私は分かりませんでした。私は古い構文に固執してきましたが、私はそれが新しいに固執する時だと思う...ありがとう! – gromit190

+1

@Birger古いスタイルを使用する方が良い時があります。しかし、これはそれらの一つではありません! – lonesomeday

+0

一般的にJavascriptのクラスを意味するのですか? – gromit190

関連する問題