Javascript 是否可以修改或继承构造函数?

Javascript 是否可以修改或继承构造函数?,javascript,javascript-objects,Javascript,Javascript Objects,我想向某些对象添加其他属性,例如window.URL.params:{}, 我假设这不能用window.URL对象完成,因为必须修改构造函数。所以我创建了一个新的对象window.NEWURL 按原样编码 函数NEWURL(url) { urlObj=新URL(URL); for(urlObj中的道具) { 如果(urlObj.hasOwnProperty(prop)) { 此[prop]=urlObj[prop]; } }; var请求={}; var pairs=url.substring(

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

按原样编码
函数NEWURL(url)
{
urlObj=新URL(URL);
for(urlObj中的道具)
{
如果(urlObj.hasOwnProperty(prop))
{
此[prop]=urlObj[prop];
}
};
var请求={};
var pairs=url.substring(url.indexOf('?'))+1.split('&');
对于(变量i=0;i
  • 是否可以修改window.URL构造函数?显示您可以修改构造函数,但我认为这对窗口对象不起作用(我认为这就是它显示的)

  • 是否可以从window.URL对象继承,而不只是在属性之间循环


  • 非常感谢

    您可以扩展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);
    

    是的,您可能可以覆盖
    window.URL
    。然而,一个习惯通常比一个习惯好。
    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);