Maison > Article > interface Web > Question amusante JavaScript : construire des URI
Créez un objet UriBuilder afin de pouvoir facilement configurer et ajuster les paramètres d'un URI.
var builder = new UriBuilder('http://www.codewars.com') builder.params.page = 1 builder.params.language = 'javascript'
Comme vous pouvez le constater, cet objet UriBuilder est en fait un constructeur qui reçoit un URI en paramètre.
De plus, son instance est liée à un objet params et à une table de hachage, qui peuvent stocker la clé et la valeur des paramètres.
builder = new UriBuilder('http://www.codewars.com?page=1')
L'URI reçu par cet objet UriBuilder peut prendre des paramètres Lorsque le constructeur est exécuté, les paramètres seront automatiquement analysés et stockés dans l'objet params.
builder.params.page = 2
L'objet params sur cette instance peut naturellement être modifié.
Voici le point clé, la méthode de construction liée au prototype :
// should return 'http://www.codewars.com?page=2' builder.build()
Notre tâche principale est de savoir comment écrire une telle méthode de construction, qui est basée sur les paramètres params entrants sur l'URI et l'instance, crée un nouvel URI et renvoie.
Le paramètre params étant un objet normal, les attributs qu'il contient peuvent naturellement être supprimés.
delete builder.params.page // should return 'http://www.codewars.com' builder.build()
Cette question est divisée en deux étapes :
La première fois consiste à exécuter le constructeur UriBuilder, qui doit analyser le nom de domaine et les paramètres de l'URI entrant et mettre les paramètres dans l'objet params.
La deuxième fois consiste à exécuter la méthode build, qui nécessite de créer un nouvel URI basé sur l'objet params et le nom de domaine.
function UriBuilder(url){ this.url = url; this.params = {}; this.domain = ""; var parseURL = function(url){ var questionMarkPos = url.indexOf("?"); if(questionMarkPos >= 0){ this.domain = url.slice(0 ,questionMarkPos); var paramStr = url.slice(questionMarkPos + 1); var andMarkPos = paramStr.indexOf("&"); if(andMarkPos >= 0){ var pairs = paramStr.split("&"); for(var i=0;i<pairs.length;i++){ var pair = pairs[i]; var key$Value = pair.split("="); this.params[key$Value[0]] = key$Value[1]; } } else{ var pair = paramStr.split("="); this.params[pair[0]] = pair[1]; } } else{ this.domain = url; } }; parseURL.call(this,this.url); if(typeof UriBuilder.prototype.build === "undefined"){ UriBuilder.prototype.build = function(){ var result = this.domain; var keys = Object.keys(this.params); if(keys.length > 0){ result += "?"; for(var i=0;i<keys.length;i++){ result += keys[i] + "=" + encodeURIComponent(this.params[keys[i]]); if(i < keys.length - 1){ result += "&"; } } } return result; }; } }
Ici, le modèle de prototype dynamique est formellement adopté car il l'encapsule mieux que le modèle constructeur-prototype.
Plus précisément, la méthode string est utilisée pour couper et épisser des URI, sans utiliser d'expressions régulières.
Il convient de noter que la valeur du paramètre de chaîne URI est codée, ce qui est également requis par la question d'origine.
Ce qui précède est le contenu des questions intéressantes en JavaScript : construction d'URI. Pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois (www.php.cn) !