как получить ссылку на вызывающий элемент, когда функция уже имеет параметр

#javascript #parameters #reference #call

#javascript #параметры #ссылка #вызов

Вопрос:

 function myFunction(par) {
...
}


el1.onclick=myFunction(5);
el2.onclick=myFunction(7);
 

Как получить ссылку на вызывающий элемент внутри myFunction ?

Комментарии:

1.К вашему сведению, вы, вероятно, спрашиваете о целевом элементе, а не о вызывающем. Термин вызывающий относится к функции, из которой была вызвана выполняемая в данный момент функция. Многие движки JS имеют свойство объекта arguments , вызываемое, caller хотя сейчас это считается устаревшим.

Ответ №1:

В вашем примере вы присваиваете возвращаемое значение от myFunction(5) to el1.onclick и возвращаемое значение от myFunction(7) to el2.onclick .

Возьмем следующий пример:

 el1.onclick=myFunction(5);
 

В приведенном выше примере myFunction(5) выполняется. Затем возвращаемому значению этой функции, назовем ее myval, присваивается значение el1.onclick . Это эквивалентно:

 var myval = myFunction(5);
el1.onclick = myval;
 

Не совсем ясно, что это именно то, что вы задумали. Чтобы это сработало, возвращаемое значение из myFunction должно быть функцией (или строкой Javascript), которая будет выполнена позже.

Именно внутри этой функции вы будете ссылаться на вызывающий элемент. this внутри этой функции будет возвращен элемент, для которого в данный момент вызывается событие.

Ответ №2:

//это говорит о том, что вызовите эту функцию и укажите, что она возвращает onclick el1.onclick= myFunction(5);

Вы хотите использовать замыкание el1.onclick = function(){myFunction(5);}

Чтобы ссылаться на элемент, вы можете передать объект в

 function test(elem, x){    
    elem.innerHTML = x;
} 

document.getElementById("foo").onclick = function(){ test(this, 1); }
 

пример 1

или вы можете использовать call, чтобы внутри слушателя this ссылаться на элемент.

 function test(x){    
    this.innerHTML = x;
}

document.getElementById("foo").onclick = function(){ test.call(this, 1); }
 

пример 2