Вы передаете MYAPP.showLove
в jQuery и говорите: «Прикрепите эту функцию как обработчик кликов к документу».
Когда вы это делаете, MYAPP.showLove
забывает , он был прикреплен к MYAPP
, поскольку вы передаете только функцию , без ссылки на пространство имен.
Поэтому, когда showLove
запускается как обработчик кликов, этот
больше не является MYAPP
. Обычно, когда вы отделяете функцию от объекта , этот
становится либо window
, либо undefined
(ES5). Однако jQuery решает этот
должен быть элемент .showLove
, который был нажат, используя call()
или apply()
код>.
Когда вы вызываете MYAPP.findId()
в showLove
, однако этот
по-прежнему установлен в MYAPP
; так как к этому прикреплен findId
(вы вызываете метод на MYAPP
).
Чтобы исправить это (каламбур не предназначен), вы можете либо передать значение this
в findId
(предпочтительно, IMO), либо использовать call()
/ применить()
.
var MYAPP = {
init: function(){
$(document).on("click",".showLove", MYAPP.showLove);
},
showLove: function(){
var thisId = MYAPP.findId(this);
$.post(//// do AJAXy stuff using thisId);
},
findId: function(which){
var thisClass = $(which).attr('class');
var thisIdPos = thisClass.indexOf("id-")+3;
var thisId = thisClass.substr(thisIdPos, 3);
return thisId;
}
}
или:
var MYAPP = {
init: function(){
$(document).on("click",".showLove", MYAPP.showLove);
},
showLove: function(){
var thisId = MYAPP.findId().call(this);
$.post(//// do AJAXy stuff using thisId);
},
findId: function(){
var thisClass = $(this).attr('class');
var thisIdPos = thisClass.indexOf("id-")+3;
var thisId = thisClass.substr(thisIdPos, 3);
return thisId;
}
}