Я переписываю проект с es5
на es6
и использую angular 1.6.1
Использую классы es6
. Делаю вот так
function getArgs(func) {
var args = func.toString().match(/function\s.*?\(([^)]*)\)/)[1];
return args.split(',').map(function(arg) {
return arg.replace(/\/\*.*\*\//, '').trim();
}).filter(function(arg) {
return arg;
});
}
function extendClassConstructor(object, parameters) {
let r = [],
i,
keys = getArgs(object);
for (i = 0; i < keys.length; i++) {
r.push({
key: keys[i],
value: parameters[i]
});
}
angular.forEach(r, function (value, key) {
Object.defineProperty(object, key, {
value: value
});
});
}
export default class DinnerController {
/** @ngInject */
constructor(DinnerService, $location, $filter, $scope, DinnerFactory, PaginationFactory, $timeout, CurrencyFactory) {
extendClassConstructor(this, arguments);
console.log(this);
}
}
Но вот в чем проблема, если я передаю this
в extendClassConstructor
, то будет ошибка
Cannot read property '1' of null
на этой строчке
var args = func.toString().match(/function\s.*?\(([^)]*)\)/)[1];
А так вообще this
не расширяется
Что я не так делаю
Я вообще не имею желания так писать
this.DinnerService = DinnerService;
this.$location = $location;
this.$filter = $filter;
this.$scope = $scope;
this.DinnerFactory = DinnerFactory;
this.PaginationFactory = PaginationFactory;
this.$timeout = $timeout;
this.CurrencyFactory = CurrencyFactory;
Как одно из решений которое я придумал
class NgController {
constructor(child, parameters) {
let keys = this.getArgs(child);
let r = [],
i;
for (i = 0; i < keys.length; i++) {
r.push({
key: keys[i],
value: parameters[i]
});
}
angular.forEach(r, (obj) => {
Object.defineProperty(this, obj.key, {
value: obj.value
});
});
}
getArgs(func) {
let args = func.toString().match(/function\s.*?\(([^)]*)\)/)[1];
return args.split(',').map( (arg) => {
return arg.replace(/\/\*.*\*\//, '').trim();
}).filter( (arg) => {
return arg;
});
}
}
И в дочернем класс в конструкторе делаем так
class DinnerController extends NgController
super(DinnerController, arguments);
Но опять же, можно ли все таки расширить прототип классов и просто потом в конструкторе вызывать this.extendPropeties(arguments)
Типа так можно ?
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Вопрос по поводу apply: можете описать более подробно какие аргументы должны передаваться в apply и какого общее предназначение?
Использую fabricjs и несколько кастомных шрифтов для своего приложения
Подскажите есть ли реализация flex на JavaScript или с использованием препроцессоров CSS? Гуглил, не нахожу