0

尝试在 JavaScript 中创建一个“类”,它既可以在类的根部具有函数,也可以在其他子函数中具有函数:

Validate(word)- 如果单词被验证,则返回 true 或 false

Validate.getRule()- 返回用于验证单词的规则。

这是示例代码:

var Validate = function (word)
{
  this.rule = /^[a-m]$/;

  if (word)
  {
     return this.rule.test(word);
  }
  else
  {
     return {
        getRule   :   function()
           { return this.rule;}
            };
  }

}();

如果您不带参数调用它,这第一次有效,但第二次我收到以下错误:

TypeError: object is not a function
4

2 回答 2

2

你有范围问题。

var Validate = function (word)
{
  var that = this;

  this.rule = /^[a-m]$/;
  if (word)
  {
     return this.rule.test(word);
  }
  else
  {
     return {
        getRule   :   function()
           { return that.rule;}
            };
  }

}();
于 2012-09-04T21:51:33.860 回答
1

当您直接调用该函数时,word参数始终未定义,this是全局范围(window),因此代码与以下内容相同:

var rule = /^[a-m]$/;
var Validate = {
  getRule: function() { return this.rule; }
};

如果您希望某个东西既可以作为函数又可以作为对象,请声明该函数,然后为其添加属性(因为函数实际上是一个对象):

var Validate = (function(){

  var rule = /^[a-m]$/;

  function validate(word) {
    return rule.test(word);
  }

  validate.getRule = function() { return rule; };

  return validate;

})();
于 2012-09-04T21:56:52.963 回答