在很多功能上我都有这一行:
if (!$('.postitle').hasClass('pmarked')) {return false;}
为了避免经常重复,我尝试了这个:
function falsea(){
if (!$('.postitle').hasClass('pmarked')) {return false;}
}
然后调用上述内容 - falsea()
而不是if (!$('.postitle')...
它不起作用。
是否有任何类似方法可以避免每次重复整行?
答案 0 :(得分:4)
级别不正确。
return false
实际上什么都不做,只是停止你的功能进一步运行。
如果您没有输出任何结果,这与简单地写return
。
所以在你的falsea()
函数中,你的返回false会停止函数,而不是外部函数,而是falsea()
本身,它不会让母亲做任何事情。
你能做的是
function falsea(){
return $('.postitle').hasClass('pmarked'))
}
在母亲那里,
if (!falsea()) return
答案 1 :(得分:4)
它不起作用。
它不起作用,因为这不是函数的工作方式(实际上是任何语言)。被调用方中的return
语句不会导致调用方终止。简单的例子:
function foo() {
console.log('before bar()');
bar();
console.log('after bar()');
}
function bar() {
console.log('in bar; before return');
return false;
console.log('in bar; after return');
}
foo();
您可以做的是将条件放在自己的函数中以重用它,但是在每个调用者中仍然需要if
语句:
function hasPmarked(){
return $('.postitle').hasClass('pmarked');
}
// in caller
if (!hasPmarked()) {
return false;
}
是否有任何类似方法可以避免每次重复整行?
您可以创建一个接受回调的函数,只有在检查成功时才执行回调。
例如:
function doStuffIfPMarked(stuff) {
if ($('.postitle').hasClass('pmarked')) {
stuff();
}
}
然后来电者可以这样做:
doStuffIfPMarked(function() {
// do something
});
即。如果你之前有这个:
function foo() {
if (!$('.postitle').hasClass('pmarked')) {return false;}
// do my stuff
}
你会写
function foo() {
doStuffIfPMarked(function() {
// do my stuff
});
}
你仍然需要重复一些代码,但是你正在抽象出条件逻辑。
答案 2 :(得分:0)
您的函数只会返回false或undefined。 尝试在最后添加
return true;
甚至更简单,只需:
return !$('.postitle').hasClass('pmarked')
请记住,返回不会传播,因此您仍需要检查此函数的返回值并返回。
if (falsea()) {return false;}