我正在尝试学习javascript中的重载。我用谷歌搜索它,有一种方法可以使用arguments
长度然后通过添加切换条件来实现。但我对这样做并不感兴趣。其实我看到了一个很好的答案
Function overloading in Javascript - Best practices但是他没有用他的意见给出任何超载的例子。那么,你如何在javascript中进行重载。
这是我的代码。我需要使用上述解决方案重载方法。他说这样做:http://jsfiddle.net/m84fg8ac/
function foo(a, b, opts) {
}
foo(1, 2, {"method":"add"});
foo(3, 4, {"test":"equals", "bar":"tree"});
我将如何在我的代码中实现这一目标?
function foo(a, b, opts) {
}
function foo(a) {
console.log("one argument pass");
}
function foo(a, b) {
console.log("two argument pass");
}
function foo(a, b, c) {
console.log("three argument pass");
}
foo(1);
foo(1,2);
foo(1,2,3);
这里是写的 使用参数进行函数重载的最佳方法是不检查参数长度或类型;检查类型只会让你的代码变慢,你可以享受Arrays,nulls,Objects等的乐趣。 大多数开发人员所做的是将对象作为其方法的最后一个参数。这个对象可以容纳任何东西。
答案 0 :(得分:1)
JavaScript在调用函数时不需要传递所有参数,因此可以实现重载:
List<Arista>
答案 1 :(得分:1)
来自http://ejohn.org/blog/javascript-method-overloading/
var namespace = {};
function addMethod(object, name, fn) {
var old = object[name];
object[name] = function() {
if (fn.length === arguments.length) {
return fn.apply(this, arguments);
} else if (typeof old === 'function') {
return old.apply(this, arguments);
}
};
}
addMethod(namespace, "foo", function (a) {
console.log("one argument pass");
});
addMethod(namespace, "foo", function (a, b) {
console.log("two arguments pass");
});
addMethod(namespace, "foo", function (a, b, c) {
console.log("three argument pass");
});
namespace.foo(1);
namespace.foo(1, 2);
namespace.foo(1, 2, 3);
var namespace = {};
function addMethod(object, name, fn) {
var old = object[name];
object[name] = function() {
if (fn.length === arguments.length) {
return fn.apply(this, arguments);
} else if (typeof old === 'function') {
return old.apply(this, arguments);
}
};
}
addMethod(namespace, "foo", function (a) {
document.write("one argument pass<br/>");
});
addMethod(namespace, "foo", function (a, b) {
document.write("two arguments pass<br/>");
});
addMethod(namespace, "foo", function (a, b, c) {
document.write("three argument pass<br/>");
});
namespace.foo(1);
namespace.foo(1, 2);
namespace.foo(1, 2, 3);
&#13;
答案 2 :(得分:0)
检查arity
@ManagedBean (name="auction")
@RequestScoped
public class AuctionBean implements Serializable {
private int money;
//getters & setters ...
}