gpt4 book ai didi

javascript - ES6 类上的自定义类数组 getter

转载 作者:行者123 更新时间:2023-11-29 23:57:12 26 4
gpt4 key购买 nike

我想创建一个 Class,它也是一个常规 Array 的包装器,但是我希望在引用实例上的项目时发生一些自定义行为类通过他们的索引。

演示我想要实现的目标:

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?

现在,我不完全确定这是可能的。通过 extending Array,我确实设法提出了我自己的不太好的解决方案。 Proxy 也出现在我的脑海中,但无法找到可行的解决方案。

这是否可能,如果可能,最好的方法是什么?

最佳答案

是的,您正在寻找代理:

const isArrayIndex = str => (str >>> 0) + '' === str && str < 4294967295;
const arrayCustomizer = {
get(target, property, receiver) {
var el = Reflect.get(target, property, receiver);
if (isArrayIndex(property) && el != null)
el = new Custom(el);
return el;
}
}
class Custom {
constructor(v) {
this.value = v;
}
valueOf() {
return this.value;
}
method(arg) {
console.log(this.value + " " + arg.replace("?", "!"));
}
}

let c = new Proxy(['something', 'other thing', 'hello?'], arrayCustomizer);
c[1].method('exists?')

关于javascript - ES6 类上的自定义类数组 getter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41336856/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com