我想为某些对象添加其他属性,例如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;
}
是否可以修改window.URL构造函数? this post here显示你可以修改一个构造函数,但我认为这不适用于一个窗口对象(我认为这就是它所显示的内容)。
是否可以从window.URL对象继承而不是仅仅循环遍历属性?
非常感谢。
答案 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);