通过方法、事件等引用对象

Referencing an object with through methods, events, and whatnot

本文关键字:引用 对象 事件 方法      更新时间:2023-09-26

设置

我正在尝试为我的网站制作一个基于对象的验证代码,在这里你可以将输入定义为对象,并将属性附加到它上,有点像这个

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"
}

这可能吗?

查看.bind():

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

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

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

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

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

其中get_validator为:

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

或者你也可以做同样的事情,但作为input对象的方法,这样你只需要做:

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