假设我们有这样的代码:
var movement = setInterval(function() {
var position = 0; // Just some example values
var limit = 200; // to go with the code below
if (position < limit) {
position = position + 10;
}
}, 500);
是否可以使用变量替换<
中的position < limit
符号和+
中的position + 10
符号(这样代码当然可以正常工作)?
答案 0 :(得分:7)
不完全是你可以使用功能图:
var comparators = {
'<': function(a,b){return a<b},
'<=': function(a,b){return a<=b}
};
var operators = {
'+': function(a,b){return a+b},
'/': function(a,b){return a/b}
};
var cp = '<', op = '+';
if (comparators[op](position, limit)) {
position = operators[op](position, 10);
}
您还可以将函数保留在变量中:
var cp = comparators['<'];
if (cp(position, limit)) {
...
除此之外:如果您希望将代码保持为DRY,则可以生成函数,例如运算符:
var operators = {};
'+*/-'.split('').forEach(function(v){
operators[v]=eval('(function(a,b){return a'+v+'b})');
});
好的,这主要是为了好玩:)
答案 1 :(得分:1)
创建一个如下函数:
function process(left, op, right){
var result;
if(op == ">")
result = left > right;
else if(op == "<")
result = left < right;
else if(op == "+")
result = left + right;
else if(op == "-")
result = left - right;
return result;
}
if (process(position, "<", limit)) {
position = process(position, "+", 10);
}
答案 2 :(得分:1)
<
和+
只是二元运算符,因此您可以将它们视为对具有两个参数的函数的调用。
E.g:
var movement = setInterval(function() {
var position = 0; // Just some example values
var limit = 200; // to go with the code below
if (func1(position, limit)) {
position = func2(position, 10);
}
}, 500);
然后你可以定义func1和func2,或者甚至是指向函数的变量。
E.g:
var func1 = function(leftHandSide, rightHandSide) {
return leftHandSize < rightHandSide;
}
答案 3 :(得分:1)
这可能是我想的另一种方式:
var position = 0;
var limit = 200;
var x = '<'; // == , >= , <=, etc...
if(new Function('return '+position+x+limit)()) alert('ok');