27.10.2015, 15:42
|
|
junior
|
|
Регистрация: 29.11.2011
Сообщений: 3,924
|
|
Сообщение от trikadin
|
ты сравнил интерфейс и имплементацию О_о
|
1. когда в js появятся интерфейсы, тогда и поговорим Сейчас их нет)
2. кроме того интерфейс - это описатель (насколько я понимаю), а у тебя уже реализация в твоем "интерфейсе" подмешена. Т.е. это не интерфейс, а базовый класс.
Сообщение от trikadin
|
Используй class properties из es7, и будет сразу отлично видно, какие свойства у класса есть. Советую в связке с flow -- webstorm его хорошо держит, это удобнее, чем jsdoc.
|
я всерьез подумываю о том, чтобы перейти на typescript
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
Последний раз редактировалось nerv_, 27.10.2015 в 15:51.
|
|
27.10.2015, 16:50
|
|
Модератор
|
|
Регистрация: 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());
|
|
27.10.2015, 19:24
|
|
Быдлокодер;)
|
|
Регистрация: 19.11.2010
Сообщений: 4,338
|
|
Цитата:
|
Он крутой, но стоит подождать 2.0, к сожалению. А пока можно юзать Flow для базовой аннотации:
|
Кстати скоро должен докатится до релиза 1.7 (поддержка асинков и генераторов).
ТайпСкрипт очень крутой (ну очень). Но ему пока реально не хватает ES6/7 фичей, хотя они ща реально сделали рывок в этом плане + пока очень раздражает невозможность описать this в анотации типа и отсутствие partial классов (причём в JS они есть). Поэтому я тоже жду 2.0.
|
|
27.10.2015, 20:03
|
|
Модератор
|
|
Регистрация: 27.04.2010
Сообщений: 3,417
|
|
Сообщение от kobezzza
|
и отсутствие partial классов (причём в JS они есть).
|
Это ты про мердж в прототип объекта, у которого методы заданы через расширенный литеральный синтаксис?
|
|
28.10.2015, 00:12
|
|
junior
|
|
Регистрация: 29.11.2011
Сообщений: 3,924
|
|
Сообщение от trikadin
|
Но в любом случае, это класс, не предназначенный для инстанциации, только для наследования.
|
т.е. абстрактный класс. Тады PointAbstract
Сообщение от trikadin
|
я использую this.constructor, а не Point (т. е. при наследовании всё будет правильно)
|
это да
Сообщение от trikadin
|
можно создать много потомков Base, у которых будет единая логика, поведение легко перегружается и расширяется.
|
и это тоже
---
FINoM, спасибо Карму не плюсует.
---
Сообщение от kobezzza
|
Поэтому я тоже жду 2.0.
|
уже известна дата релиза?
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
|
|
28.10.2015, 01:23
|
|
Профессор
|
|
Регистрация: 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.
|
|
28.10.2015, 01:46
|
|
Модератор
|
|
Регистрация: 27.04.2010
Сообщений: 3,417
|
|
Сообщение от nerv_
|
т.е. абстрактный класс. Тады PointAbstract
|
Интерфейсом скорее по привычке обзываю.
А именовать как хочешь можно, хех.
|
|
28.10.2015, 21:22
|
|
Профессор
|
|
Регистрация: 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.
|
|
05.11.2015, 15:24
|
|
I am Student
|
|
Регистрация: 17.12.2011
Сообщений: 4,415
|
|
как в es6 сделать что то такое?
расширить класс объектом
var obj = {
hello: "world"
};
class UseGuide extends obj {
constructor(height, width) {
super();
}
}
__________________
Цитата:
|
Если ограничения и условия описываются как "коробка", то хитрость в том что бы найти именно коробку... Не думайте о чем то глобальном - найдите коробку.
|
|
|
|
|