0

我正在尝试制作一个具有属性和函数的模块,它可以像验证器对象一样使用,它可以验证内部的所有对象,如果验证器成功,则返回 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. 当我使用 build 方法定义 valid 时,会出现 var valid。

为什么构造函数一开始没有定义有效变量?为什么build方法可以定义有效变量???

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

谢谢大家!

4

3 回答 3

2

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

于 2013-08-24T19:53:03.437 回答
1

你在那里跳过了一个 else 。逻辑是,如果传递了参数,则使用它们来启动,否则设置两个“无参数”属性:

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';
    }
};
于 2013-08-24T20:07:30.693 回答
0

嗯,第一个

Publicacion.prototype.

应该是

Machine.prototype

和 Publicacion.prototype.buildPublish

应该

Machine.buildMachine

但这可能不是你的意思。

valid 为您返回 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);
}

};

于 2013-08-24T19:56:29.880 回答