Использование "константы" в объекте
Не подскажите, есть ли способ при литеральном синтаксисе в определении объекта:
data: {
products: [],
cart: {},
limitMessage: 4,
CONST_STATE_PRODUCTLIST: 'productList',
CONST_STATE_CHECKOUT: 'checkout',
state: 'productList',
},
св-во state проинициализировать из CONST_STATE_PRODUCTLIST ? Чтобы не как сейчас, когда дублируется строка 'productList' Как в php
class x {
const FORMAT_HTML = 'html';
public $format = self::FORMAT_HTML;
}
|
Можно так:
{
products: [],
cart: {},
limitMessage: 4,
CONST_STATE_PRODUCTLIST: 'productList',
CONST_STATE_CHECKOUT: 'checkout',
get state() {
return this.CONST_STATE_PRODUCTLIST;
},
})
Можно так:
const data = {
products: [],
cart: {},
limitMessage: 4,
CONST_STATE_PRODUCTLIST: 'productList',
CONST_STATE_CHECKOUT: 'checkout'
};
data.state = data.CONST_STATE_PRODUCTLIST;
Как в php не получится. |
Как в php, через класс можно так
class X {
static FORMAT_HTML = 'html';
format = X.FORMAT_HTML;
}
let x = new X;
consle.log(x.format) // 'html'
Но работает это только в Хроме и ему подобных (Edg 79+, Опера, Яндекс), в Файрфоксе - самом последнем (75). В Node. В Сафари пока не работает. |
Цитата:
var Data = function(){
this.products = [];
this.cart = {};
this.limitMessage = 4;
this.state = this.CONST_STATE_PRODUCTLIST;
}
Data.prototype.CONST_STATE_PRODUCTLIST = 'productList';
Data.prototype.CONST_STATE_CHECKOUT= 'checkout';
var data = new Data();
console.log(data)
|
Ну не логично. Потом просматривая код, видя
if (a.state == a.CONST_STATE_PRODUCTLIST)... Будет думаться, что у каждого объекта есть своя (может быть отличная) CONST_STATE_PRODUCTLIST Логичнее все таки var Data = function(){ this.products = []; this.cart = {}; this.limitMessage = 4; this.state = Data.CONST_STATE_PRODUCTLIST; } Data.CONST_STATE_PRODUCTLIST = 'productList'; Data.CONST_STATE_CHECKOUT= 'checkout'; |
Цитата:
var app = new Vue({
el: '#app',
data: {
products: [],
//...
}
Вот, соответственно в этом контексте и возник вопрос. Геттер кстати тут наверное и не сработает, vue свои геттеры создает. Цитата:
Спросил чисто понять может в доках упустил какую то хитренькую возможность так сделать. Определю такой объект через конструктор, как выше говорите |
micscr,
ещё можно самовыполняющуюся функцию (IIFE) вставить, которая сделает что угодно и вернёт то, что нужно:
data: (function(d){
d.state = d.CONST_STATE_PRODUCTLIST;
return d;
})({
products: [],
cart: {},
limitMessage: 4,
CONST_STATE_PRODUCTLIST: 'productList',
CONST_STATE_CHECKOUT: 'checkout'
}),
|
| Часовой пояс GMT +3, время: 10:49. |