dicomweb-client里构造函数DICOMwebClient
dicomweb-client
里边的核心功能大多数都包含在DICOMwebClient
类中,这个类的代码非常长,但是只需要把主干部分提出来分析即可,DICOMwebClient
类的结构如下。
var DICOMwebClient =
function () {
function DICOMwebClient(options) {
...
}
return DICOMwebClient
}();
注意这个代码最后边的小括号一定不能去掉,这个小括号的意思是直接调用匿名函数将返回值传递给开头部分的变量DICOMwebClient
,将等号右端的匿名函数用小括号括起来就比较清晰了:
var DICOMwebClient =
(function () {
function DICOMwebClient(options) {
...
}
return DICOMwebClient
})();
因此var DICOMwebClient
的值就是function DICOMwebClient(options){...}
,如果要重构这段代码也可以删除冗余的部分,比如这样:
function DICOMwebClient(options) {
...
}
代码function DICOMwebClient
里的DICOMwebClient
是一个构造函数,本质是一个函数,构造函数内部的this指向构造该构造函数的实例,所以this instanceof DICOMwebClient
的值为true
。
构造函数的开头调用了_classCallCheck
方法,方法源码如下:
function _classCallCheck(instance, Constructor) {
if (!(instance instanceof Constructor)) {
throw new TypeError("Cannot call a class as a function");
}
}
如果通过构造函数的调用方法,先用new实例化,那么if里边将为false
,不会报错,如果以普通函数的方法调用,if里边将为true
,则会执行TypeError
,这样做的目的是让浏览器console端报错更为清晰,便于调试和多人开发。如果没有classCallCheck
函数,那么浏览器端将会报一个参数未定义的错误(即xxx is not defined
),这会让调试的时候变得很困惑。
构造函数规定了传入参数里url必须要有,否则会报错,源码如下:
this.baseURL = options.url;
if (!this.baseURL) {
console.error("no DICOMweb base url provided - calls will fail");
}
如果传入的参数中有username
,那么password
一定要有,否则也会报错:
if ("username" in options) {
this.username = options.username;
if (!("password" in options)) {
console.error("no password provided to authenticate with DICOMweb service");
}
this.password = options.password;
}
关于qidoURLPrefix,wadoURLPrefix,stowURLPrefix
这三个参数,如果有,则会将他们的值加在baseurl
的值后边作为构造函数自己的属性值(qidoURL,wadoURL,stowURL
这三个属性)。对应源码:
if ("qidoURLPrefix" in options) {
console.log("use URL prefix for QIDO-RS: ".concat(options.qidoURLPrefix));
this.qidoURL = "".concat(this.baseURL, "/").concat(options.qidoURLPrefix);
} else {
this.qidoURL = this.baseURL;
}
if ("wadoURLPrefix" in options) {
console.log("use URL prefix for WADO-RS: ".concat(options.wadoURLPrefix));
this.wadoURL = "".concat(this.baseURL, "/").concat(options.wadoURLPrefix);
} else {
this.wadoURL = this.baseURL;
}
if ("stowURLPrefix" in options) {
console.log("use URL prefix for STOW-RS: ".concat(options.stowURLPrefix));
this.stowURL = "".concat(this.baseURL, "/").concat(options.stowURLPrefix);
} else {
this.stowURL = this.baseURL;
}
其他几个参数requstionHooks,headers(对象),errorInterceptor(函数),verbose(布尔值)
,如果存在则直接赋值给构造函数的属性,如果不存在则设为空,verbose
如果不是false,则默认为true