Если что-то попроще, но при этом более-менее ООПшное, то можно как-то так:
class Plugin {
constructor (rawUrl, rawName) {
this.url = new UrlParser(rawUrl);
this.name = new NameParser(rawName);
}
doSomething () {
// code
}
}
function userCode() {
new Plugin("example.com", "FooBar").doSomething()
}
Если хотите побольше DI и всего такого, но при этом не потерять лёгкость использования, то можно так:
class Plugin {
constructor (urlParser, nameParser) {
this.url = urlParser;
this.name = nameParser;
}
doSomething () {
// code
}
}
Plugin.init = function (url, name) {
return new Plugin(
new UrlParser(url),
new NameParser(name)
);
}
function userCode() {
Plugin.init("example.com", "FooBar").doSomething()
}
UrlParser и NameParser - это классы, которые парсят всё необходимое, а потом внутри имеют свойства для обращения к ним.
class UrlParser {
constructor (urlString) {
var result = this.matchUrlStrign(urlString)
this.anchor = result[0];
this.path = result[1];
// etc
}
}
Соответственно, в плагине используете как-то так:
this.url.anchor