Javascript 从WHATWG URL对象中删除协议属性

Javascript 从WHATWG URL对象中删除协议属性,javascript,node.js,Javascript,Node.js,我有一个小的构建器类,它使用遗留节点require('url')从url对象执行url操作,但是现在我尝试将其迁移到新的WhatwgURL类 在我的构建器类中,我有一个名为removeProtocol()的方法,它只不过是删除协议,这样我们就可以转换为字符串URL,比如test.com/path/go/where,而不是https://test.com/path/go/somewhere 而新类比旧类工作得更好。它不接受协议为空字符串,将其保留为以前的值 我试过这样的方法: delete thi

我有一个小的构建器类,它使用遗留节点require('url')从url对象执行url操作,但是现在我尝试将其迁移到新的WhatwgURL类

在我的构建器类中,我有一个名为removeProtocol()的方法,它只不过是删除协议,这样我们就可以转换为字符串URL,比如
test.com/path/go/where
,而不是
https://test.com/path/go/somewhere

而新类比旧类工作得更好。它不接受协议为空字符串,将其保留为以前的值

我试过这样的方法:

delete this.url.protocol => this was ignored
delete this.url.__proto__.protocol => also results in the url being printed with the protocol.
从href属性中删除协议也会导致错误

TypeError: Invalid URL: test.com/path/go/somewhere
这门课有什么办法吗。或者这是否意味着我必须将对象转换为字符串a将其从字符串中删除协议?

方案(也称为协议)是有效URL的必要部分,WHATWG URL对象表示有效URL

所以,回答你的问题:不,没有协议就不可能有whatwgURL对象

可以扩展
URL
类:

类协议URL扩展URL{
构造器(plURL,基本){
超级(“http://”+plURL,base);
}
toString(){
返回this.host+this.pathname+this.search+this.hash;
}
}
const url=newprotocollessurl(“google.com/search?q=hello+world#something”);
console.log(“主机:%s”,url.Host);

console.log(““URL”:%s”,URL)是的,您必须自己将其转换为字符串。请注意,
URL
实例表示已解析的绝对URL。关于您的尝试,请参见:“根据浏览器惯例,
URL
对象的所有属性在类原型上实现为getter和setter,而不是作为对象本身的数据属性。因此,与传统的
urlObjects
不同,在URL对象的任何属性上使用
delete
关键字(例如
delete myURL.protocol
delete myURL.pathname
等)没有效果,但仍将返回true。“@Bergi谢谢你的回复。删除属性是愚蠢的绝望尝试,tbh。我确实读过规范,因为在构造函数中有一个没有协议的url就构成了一个无效的url,我很惊讶他们确保所有属性也在验证它(因为节点中的前一个url对象根本不关心。这是问题链接,尽管我在搜索中没有看到它。谢谢你。我不明白为什么我根本没有想到它。先生,你刚刚震撼了我的一天。