Показать сообщение отдельно
  #1505 (permalink)  
Старый 27.10.2015, 01:07
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

Сообщение от 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, пример? Шторм вроде как не подхватывает...
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук

Последний раз редактировалось nerv_, 27.10.2015 в 01:17.
Ответить с цитированием