分配被认为有害的jQuery函数?

Joe*_*Fan 2 javascript jquery function-pointers

这段代码工作正常:

if (chk.checked)
    div.show(delay);
else
    div.hide(delay);
Run Code Online (Sandbox Code Playgroud)

我试图通过像这样重构它来变得聪明:

var showHide = chk.checked ? div.show : div.hide;
showHide(delay);
Run Code Online (Sandbox Code Playgroud)

但这导致jQuery内部出现异常.2段代码不应该相同吗?

Poi*_*nty 5

你可以这样做:

var showHide = chk.checked ? 'show' : 'hide';
div[showHide](delay);
Run Code Online (Sandbox Code Playgroud)

如果您只是保存对该函数的引用,您将丢失接收器 - 也就是说,在函数内部this引用将是错误的.

我想你可以这样做:

var showHide = chk.checked ? div.show : div.hide;
showHide.call(div, delay);
Run Code Online (Sandbox Code Playgroud)

编辑或,以避免在第一行中引用"div"两次:

var showHide = div[chk.checked ? 'show' : 'hide'];
Run Code Online (Sandbox Code Playgroud)

我不确定这样的重构会让事情变得更清楚:-)