将 "this" 添加到也接受其他参数的单击事件函数

Add "this" to click event function that also takes other arguments

我总能做到这一点(简单打印被点击的对象):

$("someobject").click(function() {console.log(this)});

而且我总能完成这项工作(插入预制函数以在单击时执行):

$("someobject").click( function() {preMadeFunction(x,y,z)});

但是如何将 this 作为附加参数传递到我正在插入的预制函数中?也就是说,我点击的对象在我插入的预制内部函数中发挥了作用,会产生这样的效果:

$("someobject").click( function() {preMadeFunction(this,x,y,z)});

您可以在使用 .call() 调用函数时绑定 this,其中第一个参数是您要为函数设置的 this 绑定,其他参数是您要传递的函数参数:

function preMadeFunction(x, y, z) {
  console.log(this);
  console.log(x, y, z);
}

$(".someobject").click(function() {
  preMadeFunction.call(this, 1,2,3);
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="someobject">A</div>
<div class="someobject">B</div>
<div class="someobject">C</div>

另一种选择是使 preMadeFunction 成为关闭输入参数的柯里化函数,而 returns 成为其 this 受 jQuery 限制的函数:

function preMadeFunction(x, y, z) {
  return function() {
    console.log(this);
    console.log(x, y, z);
  }
}

$(".someobject").click(preMadeFunction(1, 2, 3));
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="someobject">A</div>
<div class="someobject">B</div>
<div class="someobject">C</div>