Javascript.RU

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

Сообщение от trikadin
ты сравнил интерфейс и имплементацию О_о
1. когда в js появятся интерфейсы, тогда и поговорим Сейчас их нет)
2. кроме того интерфейс - это описатель (насколько я понимаю), а у тебя уже реализация в твоем "интерфейсе" подмешена. Т.е. это не интерфейс, а базовый класс.

Сообщение от trikadin
Используй class properties из es7, и будет сразу отлично видно, какие свойства у класса есть. Советую в связке с flow -- webstorm его хорошо держит, это удобнее, чем jsdoc.
я всерьез подумываю о том, чтобы перейти на typescript
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук

Последний раз редактировалось nerv_, 27.10.2015 в 15:51.
Ответить с цитированием
  #1512 (permalink)  
Старый 27.10.2015, 16:50
Аватар для trikadin
Модератор
Отправить личное сообщение для trikadin Посмотреть профиль Найти все сообщения от trikadin
 
Регистрация: 27.04.2010
Сообщений: 3,417

Сообщение от nerv_
1. когда в js появятся интерфейсы, тогда и поговорим Сейчас их нет)
2. кроме того интерфейс - это описатель (насколько я понимаю), а у тебя уже реализация в твоем "интерфейсе" подмешена. Т.е. это не интерфейс, а базовый класс.
Ну да, ты прав. Но в любом случае, это класс, не предназначенный для инстанциации, только для наследования. Какие плюсы вижу я: я использую this.constructor, а не Point (т. е. при наследовании всё будет правильно), можно создать много потомков Base, у которых будет единая логика, поведение легко перегружается и расширяется.

Сообщение от nerv_
я всерьез подумываю о том, чтобы перейти на typescript
Он крутой, но стоит подождать 2.0, к сожалению. А пока можно юзать Flow для базовой аннотации:

class Base {
  constructor() {
    Object.assign(this, this.constructor.castConstructorData(...arguments));
  }

  clone() :Base {
    return new this.constructor(this);
  }

  static castConstructorData() {};
}

class Point extends Base {
  x: number;
  y: number;

  constructor(
    pointOrX: ?(number | {x: number, y: number} | Point) = 0,
    y: ?number = 0
  ) {
    super(...arguments);
  }

  static castConstructorData(
    pointOrX: ?(number | {x: number, y: number} | Point) = 0,
    y: ?number = 0
  ) : {x: number, y: number} {
    if (typeof pointOrX === 'number') {
      return {x: pointOrX, y};
    }

    if (typeof pointOrX === 'object') {
      return {x: pointOrX.x, y: pointOrX.y};
    }

    throw new TypeError(`Invalid arguments for Point`);
  }
}


console.log(new Point());
console.log(new Point(1, 2));
console.log(new Point({x: 1, y: 2}));
console.log(new Point(new Point(1, 2)));
console.log(new Point(1, 2).clone());
__________________
Читайте:
Ты любопытный) Всё-таки, ничему в этом мире не помешает хорошая доля юмора)
Как спросить, чтобы вам ответили
Часто Задаваемые Вопросы (FAQ)
Ответить с цитированием
  #1513 (permalink)  
Старый 27.10.2015, 19:24
Аватар для kobezzza
Быдлокодер;)
Отправить личное сообщение для kobezzza Посмотреть профиль Найти все сообщения от kobezzza
 
Регистрация: 19.11.2010
Сообщений: 4,338

Цитата:
Он крутой, но стоит подождать 2.0, к сожалению. А пока можно юзать Flow для базовой аннотации:
Кстати скоро должен докатится до релиза 1.7 (поддержка асинков и генераторов).

ТайпСкрипт очень крутой (ну очень). Но ему пока реально не хватает ES6/7 фичей, хотя они ща реально сделали рывок в этом плане + пока очень раздражает невозможность описать this в анотации типа и отсутствие partial классов (причём в JS они есть). Поэтому я тоже жду 2.0.
__________________
kobezzza
code monkey
Ответить с цитированием
  #1514 (permalink)  
Старый 27.10.2015, 20:03
Аватар для trikadin
Модератор
Отправить личное сообщение для trikadin Посмотреть профиль Найти все сообщения от trikadin
 
Регистрация: 27.04.2010
Сообщений: 3,417

Сообщение от kobezzza
и отсутствие partial классов (причём в JS они есть).
Это ты про мердж в прототип объекта, у которого методы заданы через расширенный литеральный синтаксис?
__________________
Читайте:
Ты любопытный) Всё-таки, ничему в этом мире не помешает хорошая доля юмора)
Как спросить, чтобы вам ответили
Часто Задаваемые Вопросы (FAQ)
Ответить с цитированием
  #1515 (permalink)  
Старый 27.10.2015, 21:33
Аватар для FINoM
Новичок
Отправить личное сообщение для FINoM Посмотреть профиль Найти все сообщения от FINoM
 
Регистрация: 05.09.2010
Сообщений: 2,298

Сообщение от nerv_
FINoM, можно больше кода? Напиши для функции foo() пример.
Лучше живой пример.
https://github.com/matreshkajs/matre...jsdoc#L87-L146

Первая вариация: http://ru.matreshka.io/#!Matreshka-on
Вторая вариация: http://ru.matreshka.io/#!Matreshka-on(2)

Как видишь, я просто определил метод дважды с разными параметрами. Для первого (основного) @variation не использовал.

(не на правах рекламы )
__________________
"Matreshka is fucking awesome" © чувак с Reddit
Matreshka.js - Три возможности
Ответить с цитированием
  #1516 (permalink)  
Старый 28.10.2015, 00:12
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

Сообщение от trikadin
Но в любом случае, это класс, не предназначенный для инстанциации, только для наследования.
т.е. абстрактный класс. Тады PointAbstract

Сообщение от trikadin
я использую this.constructor, а не Point (т. е. при наследовании всё будет правильно)
это да
Сообщение от trikadin
можно создать много потомков Base, у которых будет единая логика, поведение легко перегружается и расширяется.
и это тоже


---

FINoM, спасибо Карму не плюсует.

---

Сообщение от kobezzza
Поэтому я тоже жду 2.0.
уже известна дата релиза?
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
Ответить с цитированием
  #1517 (permalink)  
Старый 28.10.2015, 01:23
Аватар для bes
bes bes вне форума
Профессор
Отправить личное сообщение для bes Посмотреть профиль Найти все сообщения от bes
 
Регистрация: 22.03.2012
Сообщений: 3,744

Смишных картинок тред
Сообщение от cyber
20.12.2013, 11:01
Сообщение от cyber Посмотреть сообщение
kobezzza, я всетаки прописал grunt, танцы с бубном и битой помогли)
сейчас это решение описано в документации http://gruntjs.com/getting-started
в 2013 году возможно его там не было, хотя на 2ip.ru показал дату создания домена Creation Date: 19-apr-2012, но может быть и не было

в общем, там при глобальной установке дополнительно к grunt-у нужно ещё поставить grunt-cli
Цитата:
npm install -g grunt-cli
при установке которого на винду создастся файлик %appdata%\npm\grunt.cmd с незатейливым содержимым, а так как каталог %appdata%\npm после установки node.js оказывается в path, а .cmd по умолчанию в pathext, то становится возможным запуск по короткому имени - grunt

натолкнулся на этот пост сегодня (читай вчера), когда пытался понять почему глобальный grunt --help не выводит справку, а локальный выводит,
оказалось, что в файле %appdata%\npm\node_modules\grunt-cli\bin\grunt, который используется при "глобальном вызове", это просто не предусмотрено в отличие от node_modules\grunt\lib\grunt.js, который используется при "локальном вызове"
логика не совсем понятна, но уже можно спокойно идти спать

Последний раз редактировалось bes, 28.10.2015 в 01:44.
Ответить с цитированием
  #1518 (permalink)  
Старый 28.10.2015, 01:46
Аватар для trikadin
Модератор
Отправить личное сообщение для trikadin Посмотреть профиль Найти все сообщения от trikadin
 
Регистрация: 27.04.2010
Сообщений: 3,417

Сообщение от nerv_
т.е. абстрактный класс. Тады PointAbstract
Интерфейсом скорее по привычке обзываю.

А именовать как хочешь можно, хех.
__________________
Читайте:
Ты любопытный) Всё-таки, ничему в этом мире не помешает хорошая доля юмора)
Как спросить, чтобы вам ответили
Часто Задаваемые Вопросы (FAQ)
Ответить с цитированием
  #1519 (permalink)  
Старый 28.10.2015, 21:22
Аватар для bes
bes bes вне форума
Профессор
Отправить личное сообщение для bes Посмотреть профиль Найти все сообщения от bes
 
Регистрация: 22.03.2012
Сообщений: 3,744

Сообщение от bes
оказалось, что в файле %appdata%\npm\node_modules\grunt-cli\bin\grunt, который используется при "глобальном вызове", это просто не предусмотрено в отличие от node_modules\grunt\lib\grunt.js, который используется при "локальном вызове"
точнее будет сказать так: файл %appdata%\npm\node_modules\grunt-cli\bin\grunt используется всегда при вызове из консоли, но при вызове глобально установленного grunt (когда не находит локально установленного) до использования node_modules\grunt\lib\grunt.js в последней строчке просто не доходит (gruntpath is null)
// Everything looks good. Require local grunt and run it.
require(gruntpath).cli();

Последний раз редактировалось bes, 28.10.2015 в 21:25.
Ответить с цитированием
  #1520 (permalink)  
Старый 05.11.2015, 15:24
Аватар для cyber
I am Student
Отправить личное сообщение для cyber Посмотреть профиль Найти все сообщения от cyber
 
Регистрация: 17.12.2011
Сообщений: 4,415

как в es6 сделать что то такое?
расширить класс объектом
var obj = {
  hello: "world"
  
};

class UseGuide extends obj {

  constructor(height, width) {
    super();
    
  }
}
__________________
Цитата:
Если ограничения и условия описываются как "коробка", то хитрость в том что бы найти именно коробку... Не думайте о чем то глобальном - найдите коробку.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Смишных картинок тред megaupload Оффтопик 3448 03.07.2023 09:47
React'а тред melky Оффтопик 246 13.11.2016 08:07
Webpack'а тред nerv_ Сборка проекта, утилиты 58 07.05.2016 13:46
Смешных историй тред monolithed Оффтопик 11 04.03.2015 04:20
Смишных видео с намеком тред godofjavascript Оффтопик 4 30.12.2012 23:50