Нужно распарсить аргументы функции
Есть объект
const builder = {
output: [],
element(value) {
return this.createSelector(value);
},
id(value) {
return this.createSelector('#' + value);
},
class(value) {
return this.createSelector('.' + value);
},
attr(value) {
return this.createSelector('[' + value + ']');
},
pseudoClass(value) {
return this.createSelector(':' + value);
},
pseudoElement(value) {
return this.createSelector('::' + value);
},
combine(selector1, combinator, selector2) {
},
stringify() {
const result = this.output.reduce((acc, item) => acc + item, '');
this.output = [];
return result;
},
createSelector(value) {
const obj = new Object(this);
this.output.push(value);
return obj;
}
};
Его метод
builder.combine(selector1, combinator, selector2);
принимает 3 аргумента. Первый и третий аргументы - это цепочки вызовов других методов объекта.
Мне нужно внутри метода builder.combine увидеть строковое представление аргументов. При попытке осуществить получаю строковое представление результатов выполнения цепочек вызова. Это, понятное дело, логично.
Уверен, должен быть способ получить именно сами цепочки вызова.
Вот, что будет входить в метод cssSelectorBuilder.combine:
builder.combine(builder.element('p').pseudoClass('focus'), '>', builder.element('a').attr('href$=".png"').
Мне надо увидеть 3 строки:
- builder.element('p').pseudoClass('focus');
- >;
- builder.element('a').attr('href$=".png"';
Источник: Stack Overflow на русском