[英]Does ECMAScript 2015(ECMAScript 6) have class initializer?
我最近看过ECMAScript 2015。
ECMAScript 2015是否有类初始化程序?
例如,我试图像解析器一样编写类;
class URLParser {
parse(url) {
let regex = /(https?):\/\/([^\/]+)\/([^\?]*)\?([^#]*)#(.*)/;
(....)
}
}
var a = new URLParser();
a.parse('http://example.com/abc');
a.parse('http://example.com/def');
var b = new URLParser();
b.parse('https://sample.net/abc');
b.parse('https://sample.net/def');
这个正则表达式在课堂上很常见 ,所以我只想初始化它一次。
我知道使用构造函数来减少初始化,但会影响实例范围 。
我想知道如何减少初级化课程 。
谢谢。
不。 但是有一个关于静态属性的提议 。
在此之前,您可以像往常一样向原型添加共享属性:
URLParser.prototype.regex = /(https?):\/\/([^\/]+)\/([^\?]*)\?([^#]*)#(.*)/;
并通过this.regex
在您的方法中访问它。
目前无法在ES6类中创建静态属性,只能在静态方法中创建静态属性。
但是您可以将属性直接附加到类,这将模拟静态属性:
class URLParser {
parse(url) {
URLParser.regex.match(...);
(....)
}
}
URLParser.regex = /(https?):\/\/([^\/]+)\/([^\?]*)\?([^#]*)#(.*)/;
它不是。 有一个类级声明初始化的建议,所以你可能会这样做
class URLParser {
static regex = /(https?):\/\/([^\/]+)\/([^\?]*)\?([^#]*)#(.*)/;
}
然后在任何地方使用URLParser.regex
来访问它。 一个更好,更简洁的方法是利用JS范围,并将正则表达式放在课前。 将正则表达式附加到类中没有任何好处。
let regex = /(https?):\/\/([^\/]+)\/([^\?]*)\?([^#]*)#(.*)/;
class URLParser {
parse(url) {
(....)
}
}
目前没有在JavaScript中创建static
属性的方法,但是,您可以在constructor
定义属性
class URLParser {
constructor() {
this.regex = /(https?):\/\/([^\/]+)\/([^\?]*)\?([^#]*)#(.*)/;
}
parse(url) {
this.regex.match(url)
(...);
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.