У вас здесь много ненужного кода.
Входные параметры, передаваемые в конструктор RemovableText, доступны при закрытии для всех методов, определенных внутри. Вам не нужно и не следует переопределять именованные параметры как vars.
function RemovableText(target, defaultText, callback) {
this.bind = function () {
YAHOO.util.Event.on(target, 'click', function (e) {
/* You can reference target, defaultText, and callback in here as well */
});
YAHOO.util.Event.on(target, 'blur', function (e) { /* and here */ });
if (callback) {
callback();
}
};
}
Определение метода экземпляра из конструктора кажется сомнительным, так как требуется, чтобы значения, передаваемые в конструктор, оставались закрытыми. Просто назначьте их свойствам экземпляра (this._target = target; и т. Д.) И добавьте методы экземпляра в прототип. Если функциональность, к которой вы стремитесь, проста, тогда зачем вообще беспокоиться о методах?
Использование события click не поддерживает навигацию с помощью клавиатуры. Вы должны использовать событие фокуса.
Я не уверен, почему вам нужно было передать обратный вызов на этапе строительства, который срабатывает сразу после присоединения подписчиков события.