Сообщение от trikadin
|
Хотя, как по мне, правильнее будет выбрать что-то одно -- я бы предпочел два параметра, x и y, тогда проблему с массивами решаем через new Point(...[x, y]), а для других Point'ов заведи статик метод типа Point.fromPoint(point) или метод clone в прототипе.
|
мой код сейчас выглядит так:
'use strict';
export default class Point {
/**
* @param {Point|Array<Number>} some
*/
constructor(...some) {
let [x, y] = Point.factory(some);
this.x = x;
this.y = y;
}
/**
* @returns {Point}
*/
clone() {
return new Point(this);
}
/**
* @param {Array} some
* @returns {Object}
*/
static factory(some) {
if (some instanceof Array) {
switch (some.length) {
case 2:
return some;
case 0:
return [0, 0];
default:
break;
}
}
if (some instanceof Point) {
return [some.x, some.y];
}
if (some instanceof Object) {
if ('x' in some && 'y' in some) {
return [some.x, some.y];
}
}
throw new TypeError(`This type not supported.`);
}
}
---
FINoM, пример? Шторм вроде как не подхватывает...