我有一些javascript类someClass
并且具有检查构造函数参数的初始化函数init
。带有这个参数的对象相当庞大,这个功能变得太大了。
function SomeClass (paramObj) {
this.inputHourId;
this.inputHourName;
this.inputHourValue;
......
......
this.Init = function (paramObj) {
if (typeof paramObj.hourOptions.inputName == "undefined") {
this.inputHourName = "default_name";
} else {
this.inputHourName = paramObj.hourOptions.inputName;
}
if (typeof paramObj.hourOptions.inputValue == "undefined") {
this.inputHourValue = "default_value";
} else {
this.inputHourValue = paramObj.hourOptions.inputValue;
}
......
......
......
}
this.Init(paramObj);
}
为了避免代码重复并使其更具可读性,我决定创建将使用check
进行var初始化的函数this.initVar = function (veriable, value) {
if (typeof value == "undefined") {
veriable = "some_default_value";
} else {
veriable = val;
}
}
添加initVar
函数后,我的Init
函数应如下所示:
this.Init = function(paramObj){ //输入小时初始化 this.initVar(this.inputHourId,paramObj.hourOptions.inputId); this.initVar(this.inputHourName,paramObj.hourOptions.inputName); this.initVar(this.inputHourValue,paramObj.hourOptions.inputValue); .... .... .... }
但在该班级this.inputHourName
仍为undefined
现在的问题。如何在函数的帮助下初始化我的类属性?或者我如何传递类属性,如函数parametr?
答案 0 :(得分:2)
那是因为当你将this.inputHourId
传递给initVar()
时,它会在更新变量时复制该变量;这不是你想要的。
您可以将initVar()
重写为此内容;它使用变量的名称作为字符串而不是变量本身。然后它使用this[variable]
来更新实际的实例变量。
this.initVar = function (variable, value) {
if (typeof value == "undefined") {
this[variable] = "some_default_value";
} else {
this[variable] = val;
}
}
然后,你称之为:
this.initVar('inputHourId', paramObj.hourOptions.inputId);
答案 1 :(得分:1)
你也可以使用这种语法代替你的ifs:
this.param1 = params.param1 || "default_value";
答案 2 :(得分:0)
如何在函数的帮助下初始化我的类属性?
由于您无法将要分配的属性的引用传递给函数,只需从函数返回值并将结果赋值给属性:
this.inputHourId = initVar(paramObj.hourOptions.inputId);