Только присвоение функции свойству объекта не связывает this
внутри функции с объектом. Это способ, которым вы вызываете функцию.
Позвонив
.hover(my_zoomin.hoverOn,...)
Вы только передаете функцию. Он не будет «помнить», к какому объекту он принадлежал. Что вы можете сделать, это передать анонимную функцию и вызвать hoverOn
внутри:
.hover(function(){ my_zoomin.hoverOn(); },...)
Это заставит this
внутри hoverOn
сослаться на my_zoomin
. Так что звонок на this.hoverReset()
будет работать. Однако внутри hoverOn
вы не будете иметь ссылку на объект jQuery, созданный селектором.
Одним из решений будет передача выбранных элементов в качестве параметра:
var zoomin = function() {
// Constructor goes here
};
zoomin.prototype = {
hoverOn: function($ele) {
this.hoverReset($ele);
// More logic here using jQuery's $ele...
},
hoverReset: function($ele) {
// Some logic here.
}
};
var my_zoomin = new zoomin();
$(".some_class").hover(function() {
my_zoomin.hoverOn($(this)); // pass $(this) to the method
}, function() {
return null;
});
В качестве следующего шага вы можете рассмотреть возможность создания jQuery-плагина .