javascript - 初始化类属性

标签 javascript oop

我有一些 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) {
    // Input hour initialization
    this.initVar(this.inputHourId, paramObj.hourOptions.inputId);
    this.initVar(this.inputHourName, 
paramObj.hourOptions.inputName);
    this.initVar(this.inputHourValue, paramObj.hourOptions.inputValue);
    ....
    ....
    ....
}

但在那之后类变量 this.inputHourName 仍然是 undefined

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

最佳答案

那是因为当您将 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);

关于javascript - 初始化类属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14461688/

相关文章:

javascript - 如何在Leaflet中按距离选择特征?

c++ - 在B类中访问A类的函数f,而f需要访问B的成员变量

java - 声明泛型类型时的编译器警告

PHP 抽象属性

javascript - 使用JavaScript播放原始音频

javascript - 从 Owl Carousel 创建多行轮播

javascript - 我的 meteor 项目规模正在失控

javascript - 在鼠标事件的 for 循环中赋值

c++ - 带有类C++的控制台应用程序菜单

c# - 让类实现不同接口(interface)以限制客户端操作时的设计问题