我正在寻找一种方法来将算术运算符符号作为函数名称然后调用它。 我想做这样的事情:
+(4,5) // Answer : 9
/(9,3) //Answer : 3
我已经看过这样的代码示例,但我无法记住它是如何分配名称的,如#34; +"到JavaScript中的函数,然后调用它。
有人能告诉我一些棘手的JavaScript方法吗?
答案 0 :(得分:2)
那是不可能的
函数名称可以包含字母,数字,下划线和美元 标志(与变量相同的规则)。
答案 1 :(得分:2)
<小时/>变量/函数名称只能包含字母,下划线,$,数字(如果它们不是第一个字符)以及其他一些ACII和unicode字符
如果您决定使用+
作为您的函数名称,则可以使用:
window['+'] = function (a,b) {
return a+b;
};
这是不好的做法,仍然只创建一个名为+
的变量“理论上”,并且只能使用以下方法调用:
window['+'](9, 10);
返回19
您建议的语法似乎是Object.defineProperty
语法:
Object.defineProperty(this, '+', {value:function () {
alert('foo');
}});
你可以创建类似的东西:
window.special = function(a, args) {
var o = {
'+': function (b,c) {
return b+c;
}
};
return o[a].apply(this, args);
};
然后:
special('+', [1, 2]);
答案 2 :(得分:2)
我知道用JS编写了10年之后。但有一个棘手的方法!正如我在代码示例中记得的那样,我看到它写的类似于
("+", function(){})
。我只记得这部分代码!@保罗。是。但是怎么样?我不记得这部分了!
定义另一个函数,该函数接受一个参数,告诉它应用哪个方法,例如
var op = (function () {
var fns = Object.create(null),
slice = Array.prototype.slice;
fns['+'] = function () { // example adder
var i, j = 0;
for (i = 0; i < arguments.length; ++i)
j += arguments[i];
return j;
};
// add other methods here
return function op(operator) {
if (operator in fns)
return fns[operator].apply(this, slice.call(arguments, 1));
throw new SyntaxError('Not a valid operator: ' + operator);
};
}());
op('+', 1, 2, 3, 4); // 10
答案 3 :(得分:0)
如果你真的想要覆盖'+'的功能,你可以添加它,你可以实际写
window['+'] = function(a, b) { return a + b; }
;
但是它做了什么......这将向窗口命名空间添加一个函数。但是,您仍然无法使用+(a,b)
调用它,您必须使用窗口命名空间。如。。
window['+'](4,5);
结果:9
调用窗口空间确实很痛苦。您不限于可以使用任何对象的window
空间。