默认对象 属性
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)
我认为正确的语法如上。您的 getter
和 setter
指向 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);
我正在玩 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)
我认为正确的语法如上。您的 getter
和 setter
指向 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);