默认对象 属性

Default Object Property

我正在玩 ES6 classes 并且为了更好地管理 class 的数组 属性,我用一个对象替换了数组并添加了所有与数组相关的函数(获取、添加、删除等)以及数组 sub-属性:

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 对象默认设置为 return items 数组?即通过:MyClass.posts 我以为我可以用 get() 来欺骗它,但没有用。

class MyClass {
  constructor() {
    this.post = [];
  }
  
  get post() {
   return [1,2,3]
  }
  
  set post(val) {
  
 }
}

let someClass = new MyClass();

console.log(someClass.post)

我认为正确的语法如上。您的 gettersetter 指向 post,其中 post 只是 MyClass 的 variable/key,因此您的 getter 和setter 应该在 MyClass 级别

如果你想隐藏实际的数组并且除了通过方法之外不可触及,它必须在构造函数中声明。任何改变它的函数也必须在构造函数中声明。如果要公开访问该项目,则必须将其附加到 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);