1

我有一些 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

现在的问题。如何在函数的帮助下初始化我的类属性?或者我如何传输类属性,如函数参数?

4

3 回答 3

2

那是因为当你传递this.inputHourIdinitVar()它时,它会在更新时复制变量;那不是你想要的。

你可以重写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);
于 2013-01-22T15:15:01.967 回答
1

你也可以使用这种语法而不是你的一堆 ifs :

this.param1 = params.param1 || "default_value";

于 2013-01-22T15:13:20.367 回答
0

如何在函数的帮助下初始化我的类属性?

由于您无法将要分配给函数的属性的引用传递给函数,因此只需从函数返回值并将结果分配给属性:

this.inputHourId = initVar(paramObj.hourOptions.inputId);
于 2013-01-22T15:14:44.607 回答