class Product {
constructor(name, price) {
this.productName = name || 'No Name';
this.price = price || 0;
}
getInfo() {
return `${this.productName} ${this.price}`;
}
}
Мой вопрос: как мне создать объект класса Product с названием по умолчанию и заданной ценой? т.е. const prod = new Product( 742);
мне нужно, чтобы конструктор понимал, что 742 - это price.
class Product {
constructor(data) {
this.productName = data.name || 'No Name';
this.price = data.price || 0;
}
getInfo() {
return `${this.productName} ${this.price}`;
}
}
console.log((new Product({price:758})).getInfo());
Думаю есть несколько способов это сделать
С помощью статических методов
class Product {
static fromPrice(price) {
return new this(null, price);
}
constructor(name, price) {
this.productName = name || 'No Name';
this.price = price || 0;
}
getInfo() {
return `${this.productName} ${this.price}`;
}
}
console.log(Product.fromPrice(200).getInfo());
console.log(new Product('Main').getInfo());
Можно внутри конструктора определять по типу переменной, чем она является
class Product {
constructor() {
this.productName = 'No Name';
this.price = 0;
// перебираем принятые аргументы
for (const arg of arguments) {
// проверяем тип аргумента
switch (typeof arg) {
// если тип является строкой
case 'string':
// то это имя продукта
this.productName = arg;
break;
// если число
case 'number':
// то цена
this.price = arg;
break;
}
}
}
getInfo() {
return `${this.productName} ${this.price}`;
}
}
console.log(new Product('Main').getInfo());
console.log(new Product(200).getInfo());
console.log(new Product(200, 'Main').getInfo());
Но как всегда остаётся один вопрос: зачем это нужно? Если это нужно, для того что бы ваш код никто и никогда не смог понять, тогда ладно. Если же вы хотите писать чисты и документируемый код, то предлагаю сделать так
/**
* Класс продукта
* @property {string} productName Наименование продукта
* @property {number} price Цена продукта
*/
class Product {
/**
* @param {string} [name='No Name'] Наименование продукта
* @param {number} [price=0] Цена продукта
*/
constructor(name, price) {
this.productName = name || 'No Name';
this.price = price || 0;
}
getInfo() {
return `${this.productName} ${this.price}`;
}
}
console.log(new Product(null, 200).getInfo());
console.log(new Product('Main').getInfo());
Виртуальный выделенный сервер (VDS) становится отличным выбором
Есть таблица, которая формируется php, но в каждой строке есть две ячейки с селектом, которые пользователь "заполняет" самостоятельноНужно...