如果/ else条件在Object内

时间:2011-06-13 11:36:45

标签: javascript

function Validator(formIsValid) {
    if(this.formIsValid) {
        alert('Form is valid!');
    }
    else {
        alert('Form is invalid...');
    } 
}
Validator.prototype = { // Notice the .prototype here, it's important!

  formIsValid: true, 

  enforceTextFieldMinLength: function(field, minLength) {
      if (!field.value || field.value.length < minLength) {
            this.formIsValid = false;
      }   
  },

  enforceLabelHasText: function(label) {
        if (!label.text) {
            this.formIsValid = false;
        }
  }
}
//var val = new Validator();

以上是我的Val.js.这就是我在otherFile.js中使用的方式

AddPatient.Firstname = FirstNameValue || Validator.enforceLabelHasText(FirstName);  

我收到错误cannot find function enforceLabelHasText in Object function Validator(formIsValid)

5 个答案:

答案 0 :(得分:5)

这是无效的语法。

您已在对象定义中转储if/else条件,如下所示:

var myObj = { a, b, c, d, 
  if (true) {
     alert('WTF!');
  }
};

这样的程序代码必须在函数内部。

答案 1 :(得分:5)

您不能将表达式放在对象定义中。如果希望在创建对象实例后执行代码,则应使用:

function Validator() {
    if(this.formIsValid) {
        alert('Form is valid!');
    }
    else {
        alert('Form is invalid...');
    } 
}
Validator.prototype = { // Notice the .prototype here, it's important!

  formIsValid: true, 

  enforceTextFieldMinLength: function(field, minLength) {
      if (!field.value || field.value.length < minLength) {
            this.formIsValid = false;
      }   
  },

  enforceLabelHasText: function(label) {
        if (!label.text) {
            this.formIsValid = false;
        }
  }
}
var a = new Validator();

这是一个虚拟解决方案;您需要向Validator()函数添加参数,以初始化formIsValid和其他值。我建议你阅读the MDC's description on prototypes

编辑:如果您使用原型解决方案,则需要在val.enforceLabelHasText(FirstName)成为全局变量之后调用val(通过省略var或者使用var window.val = new Validator())。

答案 2 :(得分:2)

Validator是一个对象文字,你只能在那里分配属性,而不是任意代码。

您可以将包含代码的功能分配给属性。

答案 3 :(得分:1)

将其绑定到开头的变量中。

var that = this; 

这可以保持这种变化并指向别的东西。 并使用萤火虫!

答案 4 :(得分:1)

可以使用iife将逻辑插入对象文字。像这样;

const testable = 1
const obj = {
  a: 'value1',
  b: (() => {
    if (testable === 1) {
      return 'testable was 1'
    } else {
      return 'testable was not 1'
    }
   })()
}

console.log(obj)