Javascript类与构造函数init

时间:2013-08-24 19:48:14

标签: javascript

我正在尝试创建一个具有属性和函数的模块,可以像验证器对象一样使用有效的方法,如果验证器成功,则返回true。

所以我制作了这个文件

function Machine(params)
{
    // this is the constructor
    if(params){
        var pub=params;
        return this.init(pub);
    }
    this.obj_params = 'null';
    this.valid = 'Not Valid';
};
Publicacion.prototype.init = function(objConfig){
    console.info('Init Success!')
    this.buildMachine(objConfig);

    return true
};
Publicacion.prototype.buildPublish = function(objConfig){
    console.info('Builded!');
    //this.valid='success'; // when uncommited, the object this.valid appears

    return true;
};

module.exports=Machine;

这是控制台

> var Machine=require('./Machine')
> undefined
> var machinegun=new Machine();
> Init Success!
> Builded!
> undefined
> machinegun.valid
> undefined

两个问题:

  1. 当我尝试访问“machinegun.valid”时,这会返回一个未定义的
  2. 当我使用构建方法定义有效时,会出现var valid。
  3. 为什么构造函数最初没有定义有效变量? 为什么有效变量可以由构建方法定义???

    我不明白javascript如何与类一起工作......

    thnx all!

3 个答案:

答案 0 :(得分:2)

该函数在能够设置this.init(pub)之前返回this.valid。您应该首先在构造函数中定义this.valid

答案 1 :(得分:1)

你正在那里跳过其他人。逻辑是如果params通过,使用它们启动,否则设置两个"没有参数"属性:

function Machine(params)
{
    // this is the constructor
    if(params){
        var pub=params;
        return this.init(pub);
    }
    else {
      this.obj_params = 'null';
      this.valid = 'Not Valid';
    }
};

答案 2 :(得分:0)

嗯,第一

Publicacion.prototype.

应该是

Machine.prototype

和     Publicacion.prototype.buildPublish

应该是

Machine.buildMachine

但这可能不是你的意思。

有效的返回false的简单原因是你没有定义它 - 你之前从函数返回。

只需更改顺序:

function Machine(params)

this.obj_params = 'null';
this.valid = 'Not Valid';
{
    // this is the constructor
    if(params){
        var pub=params;
        return this.init(pub);
}

};