通过方法,事件和诸如此类的方法引用对象

时间:2011-04-25 08:57:17

标签: javascript events validation object

建立

我正在尝试为我的网站制作一个基于对象的验证代码,您可以在其中将输入定义为对象并将属性附加到它上面就像这样

function input(id,isRequired) {
   this.id = id
   this.isRequired = isRequired
   this.getElement = getElem;
   this.getValue = getValue;
   this.writeSpan = writeSpan;
   this.checkText = checkText;
   this.isText = true
   this.checkEmpty = checkEmpty;
   this.isEmpty = true
   this.isValid = false
}

我目前有一个像这样设置的事件处理程序

firstName.getElement().onblur = function() {validate(firstName)}

其中firstName是输入对象,getElement()方法执行以下操作:

function getElem() {
    return document.getElementById(this.id)
}

问题

我想要做的是能够通过使用类似于.this的东西来引用带有validate函数的firstName对象,并有效地删除匿名函数。我想这样做主要是因为我正在与不熟悉javascript的团队成员合作,而代码越少越好。

我猜我正在寻找的代码看起来像这样:

firstName.getElement().onblur = validate

function validate() {
    object = "your code here"
}

这可能吗?

1 个答案:

答案 0 :(得分:1)

查看.bind()

firstName.getElement().onblur = validate.bind(firstName);

这会使this函数中的validate引用firstName(因此不会将其作为参数传递)。

并非所有浏览器都支持它(它是ECMAScript5的一部分),但链接显示了自定义实现。

或者,您可以创建一个为您生成匿名函数的新函数:

firstName.getElement().onblur = get_validator(firstName);

其中get_validator是:

function get_validator(obj) {
   return function() {
       validate(obj);
   }
}

或者您也可以这样做,但作为input对象的方法,只需要做一个:

firstName.getElement().onblur = firstName.getValidator();