首页 > 程序开发 > web前端 > JavaScript > 正文
JavaScript趣题:构建URI
2016-09-20       个评论    来源:彼岸彩虹  
收藏    我要投稿

创建一个UriBuilder对象,使得你可以轻松地对一个URI进行配置,参数调整。

var builder = new UriBuilder('http://www.codewars.com')
builder.params.page = 1
builder.params.language = 'javascript'
大家可以看到,这个UriBuilder对象其实是一个构造函数,它接收一个URI作为参数。

而且,它的实例上绑定了一个params对象,一个hash表,可以存放参数的key和value。

builder = new UriBuilder('http://www.codewars.com?page=1')
这个UriBuilder对象接收的URI是可以带参数的,在构造函数被执行的时候,参数将被自动解析,并被存到params对象中。
builder.params.page = 2
这个实例上的params对象自然是可以被修改的。

关键的地方来了,这个绑定在原型上的build方法:

// should return 'http://www.codewars.com?page=2'
builder.build()
咋们的主要任务就是如何编写一个这样的build方法,它根据传入的URI和实例上的params参数,构建新的URI并返回。

因为params参数是普通对象,因此自然可以删除其中的属性。

delete builder.params.page

// should return 'http://www.codewars.com'
builder.build()
这个题目分为两步:

第一次是执行UriBuilder构造函数,需要解析传入URI的域名及参数,将参数放到params对象中。

第二次是执行build方法,需要根据params对象和域名构建新的URI。

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 0){
                result += "?";
                for(var i=0;i
在这里,形式上采用动态原型模式,因为它比构造函数-原型式封装得更好。

具体上,采用字符串方法切割,拼接URI,没有采用正则。

值得注意的一点,对URI字符串参数的value进行了编码,这也是原题所要求的。

点击复制链接 与好友分享!回本站首页
上一篇:十大经典算法总结(Javascript描述)
下一篇:JavaScript数据类型
相关文章
图文推荐
文章
推荐
点击排行

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训
版权所有: 红黑联盟--致力于做实用的IT技术学习网站