我正在尝试为我的网站制作一个基于对象的验证代码,您可以在其中将输入定义为对象并将属性附加到它上面就像这样
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"
}
这可能吗?
答案 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();