javascript库如何忽略某些参数,或使某些函数参数"optional"?
How do javascript libraries ignore certain parameters, or make certain function parameters "optional"?
我将使用 Node.js 作为示例,但我在很多文档中都看到了这一点:
(来自 net
模块文档):
net.createConnection(port, [host], [connectListener])
Creates a TCP connection to port on host. If host is omitted, 'localhost' will be assumed. The connectListener parameter will be added as an listener for the 'connect' event.
后面是示例代码,例如:
a = net.createConnection(8080, function(c){
console.log('do something');
});
我的问题是 createConnection
函数需要 1 - 3 个参数。以上,我分两次通过。 Node 怎么知道我传入的函数参数是 connectListener
参数而不是 host
参数?
可能是内部调用net.createConnection(options, [connectionListener])
,使参数映射正确
参考:
http://nodejs.org/api/net.html#net_net_createconnection_options_connectionlistener
可以检查类型,因此检查参数 2 是一个允许这种行为的函数 Handling optional parameters in javascript
如果参数有不同的类型,你可以简单地测试一下。这里 port
可能是一个数字,host
是一个字符串,connectionListener
是一个函数。
例如:
function createConnection(port, host, connectionListener) {
if (typeof host === 'function') {
conectionListener = host;
host = null;
}
if (!host) {
host = 'localhost';
}
// ...
}
当然,如果参数是同一类型,这就不行了。这种情况没有通用的解决方案。
我不是特别了解 createConnection
的实现,但一种可能的方法是计算传递给函数的参数并检查它们的类型,例如:
function createConnection(port, host, connectListener) {
var f = connectListener;
if(arguments.length === 2 && typeof host === "function") {
f = host;
host = "localhost";
}
console.log("Host: " + host);
console.log("Port: " + port);
f();
}
createConnection(8080, function() {
console.log("Connecting listener...");
});
这里是fiddle.
我将使用 Node.js 作为示例,但我在很多文档中都看到了这一点:
(来自 net
模块文档):
net.createConnection(port, [host], [connectListener])
Creates a TCP connection to port on host. If host is omitted, 'localhost' will be assumed. The connectListener parameter will be added as an listener for the 'connect' event.
后面是示例代码,例如:
a = net.createConnection(8080, function(c){
console.log('do something');
});
我的问题是 createConnection
函数需要 1 - 3 个参数。以上,我分两次通过。 Node 怎么知道我传入的函数参数是 connectListener
参数而不是 host
参数?
可能是内部调用net.createConnection(options, [connectionListener])
,使参数映射正确
参考:
http://nodejs.org/api/net.html#net_net_createconnection_options_connectionlistener
可以检查类型,因此检查参数 2 是一个允许这种行为的函数 Handling optional parameters in javascript
如果参数有不同的类型,你可以简单地测试一下。这里 port
可能是一个数字,host
是一个字符串,connectionListener
是一个函数。
例如:
function createConnection(port, host, connectionListener) {
if (typeof host === 'function') {
conectionListener = host;
host = null;
}
if (!host) {
host = 'localhost';
}
// ...
}
当然,如果参数是同一类型,这就不行了。这种情况没有通用的解决方案。
我不是特别了解 createConnection
的实现,但一种可能的方法是计算传递给函数的参数并检查它们的类型,例如:
function createConnection(port, host, connectListener) {
var f = connectListener;
if(arguments.length === 2 && typeof host === "function") {
f = host;
host = "localhost";
}
console.log("Host: " + host);
console.log("Port: " + port);
f();
}
createConnection(8080, function() {
console.log("Connecting listener...");
});
这里是fiddle.