我正在玩ES6类并且为了更好地管理类的数组属性,我用一个对象替换了数组,并添加了所有与数组相关的函数(get,add,remove等)以及一个数组子属性:
class MyClass {
constructor () {
this.date_created = new Date()
}
posts = {
items: [],
get: () => {
return this.posts.items
},
add: (value) => this.posts.items.unshift(value),
remove: (index) => this.posts.items.splice(index, 1)
}
}
所以它让我思考:有没有办法设置posts
对象默认返回items数组?即通过:MyClass.posts
我以为我可以用get()
欺骗它但是没有用。
答案 0 :(得分:2)
如果要保持实际数组隐藏且不可触及,除非通过方法,它必须在构造函数中声明。任何改变它的函数也必须在构造函数中声明。如果该项目可公开访问,则必须将其附加到this
。
class Post extends Array
{
add(val)
{
this.unshift(val);
}
remove()
{
this.shift();
}
}
class MyClass
{
constructor()
{
this.date_created = new Date()
this.post = new Post();
}
}
let x = new MyClass();
console.log(x.post);
x.post.add(2);
console.log(x.post);

答案 1 :(得分:0)
class MyClass {
constructor() {
this.post = [];
}
get post() {
return [1,2,3]
}
set post(val) {
}
}
let someClass = new MyClass();
console.log(someClass.post)

我相信正确的语法如上所述。您的getter
和setter
指向post,其中post只是MyClass
的变量/键,因此您的getter和setter应为MyClass
级