Array
のラッパーでもあるClass
を作成したいと思いますが、インデックスを使用してクラスのインスタンスの項目を参照するときにカスタム動作が必要になります。私が達成したいものをデモするカスタム配列のようなES6クラスのゲッター
:
class Custom {
constructor (arr) {
this.arr = arr;
}
method (str) {
this.arr.forEach(item => {
console.log(`${item} ${str}`);
})
}
[Magic.here]() {
// this part should invoke the constructor of this class with a single item of the array passed into it as an array of one as argument.
}
}
let c = new Custom(['something', 'other thing', 'hello?']);
c[1].method('exists?') // -> other thing exists?
は今、私はそれが可能であることを完全に確認していません。私はextend
ing Array
によって私自身のあまりにも偉大な解決策を思いついた。 Proxy
も私の頭に浮かんだが、解決策を見つけることができなかった。
それは可能なのでしょうかもしそうなら、最良の方法は何ですか?
あなたは、要素の周りにラッパーで配列の周囲にラッパーを混ぜているようです。それは 'c.method()'や 'c [1] .method()'でしょうか?彼らは間違いなく異なるクラスを持つべきです。 – Bergi
私のコードデモの '[Magic.here]'ビット内にあるコメントを読んだら、getterからコンストラクタを呼び出すようにしたいと思います。 'c [0]'は 'newカスタム(this.arr [0]) 'は基本的に' method'を別々に呼び出すことができます。 –
はい、コンストラクタのパラメータ名と配列を使ったinvokcationの例から、 'Custom'は配列ラッパーのコンストラクタであり、ゲッターから呼び出される要素のコンストラクタではありません。 – Bergi