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

trikadin, сравни это

class Point {
    /**
     * @param {Point|Array<Number>} some
     */
    constructor(...any) {
        let [x, y] = Point.factory(any);
        this.x = x;
        this.y = y;
    }
}


и это

/**
 * @interface
 */
class Base {
  constructor() {
    Object.assign(this, this.constructor.castConstructorData(...arguments));
  }
}


в первом случае я сразу вижу свойства объекта, во втором - кто его знает что там

FINoM, можно больше кода? Напиши для функции foo() пример.

---

забыл, что можно запускать уже подобный код в браузере

'use strict';


class Point {
    /**
     * Examples:
     *      new Point()
     *      new Point(1, 2)
     *      new Point([3, 4])
     *      new Point({x: 5, y: 6})
     *      new Point(new Point(7, 8))      
     *
     * @param {Point|Array<Number>} some
     */
    constructor(some) {
        let xy = Point.factory(Array.from(arguments)); // все-таки нельзя пока без доводки руками =(
        this.x = xy[0];
        this.y = xy[1];
    }
    /**
     * @returns {Point}
     */
    clone() {
        return new Point(this);
    }
    /**
     * @param {Point|Array<Number>} some
     * @returns {Object}
     */
    static factory(some) {
        if (!some.length) {
            return [0, 0];
        }
        if (some.length === 2) {
            return some;
        }
        let first = some[0]; // some.length === 1
        if (first instanceof Array) {
            return first;
        }
        if (first instanceof Point) {
            return [first.x, first.y];
        }
        if (first instanceof Object) {
            if ('x' in first && 'y' in first) {
                return [first.x, first.y];
            }
        }
        throw new TypeError(`This type not supported.`);
    }
}


console.log(new Point());
console.log(new Point(1, 2));
console.log(new Point([3, 4]));
console.log(new Point({x: 5, y: 6}));
console.log(new Point(new Point(7, 8)));
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук

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