将 "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>
我总能做到这一点(简单打印被点击的对象):
$("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>