繁体   English   中英

ECMAScript 2015(ECMAScript 6)是否具有类初始化程序?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM