修改或继承构造函数可能吗?

时间:2014-02-25 15:41:04

标签: javascript javascript-objects

我想为某些对象添加其他属性,例如window.URL.params:{}, 我假设这不能用window.URL对象完成,因为构造函数将不得不被修改。所以我创建了一个新的对象窗口.NEWURL

代码

function NEWURL(url)
{
    urlObj = new URL(url);
    for (prop in urlObj)
    {
        if(urlObj.hasOwnProperty(prop))
        {
            this[prop] = urlObj[prop];
        }
    };
    var request = {};
    var pairs = url.substring(url.indexOf('?') + 1).split('&');
    for (var i = 0; i < pairs.length; i++)
    {
        var pair = pairs[i].split('=');
        request[decodeURIComponent(pair[0])] = decodeURIComponent(pair[1]);
    }
    this.params = request;
}
  1. 是否可以修改window.URL构造函数? this post here显示你可以修改一个构造函数,但我认为这不适用于一个窗口对象(我认为这就是它所显示的内容)。

  2. 是否可以从window.URL对象继承而不是仅仅循环遍历属性?

  3. 非常感谢。

1 个答案:

答案 0 :(得分:1)

您可以扩展URL对象,为其添加其他属性,而不是尝试修改现有对象(这也是不改变您不拥有的对象的好习惯)。

每当你想要这个对象时,你应该调用你的函数来获取它,而不是直接调用window.url。

这是jQuery用于dom的方法(基本上包装dom对象而不是变异)。

最简单的方法是继承:

function myUrl() {
    var url = Object.create(new URL());
    // now mutate url however you want.
    url.foo = "c00l";
    return url;
}

// Another approach

function MyURL() {
   URL.call(this);
   // Do what you want.
   this.foo = "c00l";
}

MyURL.prototype = Object.create(URL.prototype);