默认对象属性

时间:2018-06-05 01:20:22

标签: javascript ecmascript-6 es6-class

我正在玩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()欺骗它但是没有用。

2 个答案:

答案 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)




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