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

2 つの問題:

  1. 「machinegun.valid」にアクセスしようとすると、未定義が返されます
  2. build メソッドを使用して有効を定義すると、var valid が表示されます。

コンストラクターが最初に有効な変数を定義しなかったのはなぜですか?? ビルドメソッドで有効な変数を定義できるのはなぜですか???

javascriptがクラスでどのように機能するかわかりません...

すべてthnx!

4

3 に答える 3

2

関数はthis.init(pub)、設定できる前に戻りますthis.validthis.validコンストラクター関数で最初に定義する必要があります。

于 2013-08-24T19:53:03.437 に答える
1

あなたはそこでelseをスキップしています。ロジックは、パラメーターが渡された場合はそれらを使用して開始し、それ以外の場合は 2 つの「パラメーターなし」プロパティを設定します。

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 に答える