2013-08-24 4 views
0

Я пытаюсь создать модуль, у которого есть свойства и функции, которые могут использоваться как объект валидатора, который действителен для всех объектов внутри, с допустимым методом, возвращающим true, если успех проверки достоверности.Javascript Классы с конструктором init

так я сделать этот файл,

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" это возвращает me a undefined
  2. Когда я использую метод построения для определения допустимого, Появится var valid.

Почему конструктор не определил действительную переменную сначала ?? Почему допустимая переменная может быть определена методом сборки ???

я не понимаю, как работает Java-классы ...

Thnx все!

+0

Как бы это вызов ('новая машина()') вызовите 'init' метод (и журнал 'Init Success!'), Если не заданы 'params' (' undefined')? – Bergi

+0

[JavaScript не имеет классов] (http://stackoverflow.com/a/13418980/1048572). Конструкторы по-прежнему являются простыми функциями, и когда вы «возвращаетесь» от них, они выходят без выполнения дополнительного кода (здесь, создавая свойства). Просто удалите 'return'. – Bergi

ответ

2

Функция возвращает this.init(pub) перед тем, как установить this.valid. Сначала вы должны определить this.valid в функции конструктора.

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); 
} 

};

+0

ошибка ввода в Publicacion, я изменяю Publicacion с машиной, чтобы упростить вопрос, мой плохой! но спасибо и благодарю вас за объяснение, im возвращая функцию перед определением. – andrescabana86

1

Вы пропустите другой там. Логика в том, что, если передаются PARAMS, использовать их для начала, в противном случае установить два «не 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'; 
    } 
}; 
+0

им не пробовал – andrescabana86

+0

В противном случае код не имеет смысла, по крайней мере для меня. Не имеет смысла иметь this.obj_params = 'null', в то же время используя параметры для инициализации. – itmitica

Смежные вопросы