如何将对象用作函数和对象?

时间:2012-09-04 21:46:08

标签: javascript closures

尝试在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

2 个答案:

答案 0 :(得分: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;}
            };
  }

}();

答案 1 :(得分: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;

})();