Использование "константы" в объекте
Не подскажите, есть ли способ при литеральном синтаксисе в определении объекта:
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, время: 16:05. |