Javascript 带有附加子函数的函数调用
我在问自己,在js中调用一个函数是否可能,同时在其中包含额外的子函数Javascript 带有附加子函数的函数调用,javascript,Javascript,我在问自己,在js中调用一个函数是否可能,同时在其中包含额外的子函数 fn(s); fn.subfn(s); 例如,使UTIL像这样 var s = "123"; string(s) // true string.blank(s) // false 我想可能是这样的: function string(s) { if(s) return typeof(s) === "string"; return { blank: function(s) { return s.t
fn(s);
fn.subfn(s);
例如,使UTIL像这样
var s = "123";
string(s) // true
string.blank(s) // false
我想可能是这样的:
function string(s) {
if(s) return typeof(s) === "string";
return {
blank: function(s) {
return s.trim().length === 0;
}
}
}
但每次我调用字符串时,我都会重新定义空白fn,可能会有糟糕的性能和糟糕的代码,或者我错了
谢谢。函数只是对象,所以是的,您可以向它们添加属性:
function string(s) {
return typeof(s) === "string";
}
string.blank = function(s) {
return s.trim().length === 0;
}
这将允许您拨打电话
string(s);
string.blank(s);
正如您的示例所示
对代码的注释: 您定义的函数在调用
string
时返回一个对象,因此您需要按如下方式调用该函数:
string().blank(s);
这与您在开始时展示的示例不同。函数只是对象,因此可以向它们添加属性:
function string(s) {
return typeof(s) === "string";
}
string.blank = function(s) {
return s.trim().length === 0;
}
这将允许您拨打电话
string(s);
string.blank(s);
正如您的示例所示
对代码的注释: 您定义的函数在调用
string
时返回一个对象,因此您需要按如下方式调用该函数:
string().blank(s);
这与您在开始时展示的示例不同。您可以尝试类似的方法(未经测试):
但是,使用“string”作为函数名可能会遇到问题,因为它可能与现有的string对象冲突。您可以尝试类似的方法(未测试): 但是,使用“string”作为函数名可能会遇到问题,因为它可能与现有的string对象冲突。您可以创建Thing()类并实例化“Thing”对象以防止重新定义函数。(Thing()而不是string(),以防止任何类型的冲突。) 您可以创建Thing()类并实例化“Thing”对象,以防止重新定义函数。(Thing()而不是string(),以防止任何类型的冲突。)
这样,
string.blank
是未定义的,我认为OP不想使用new
非常正确。我将删除原型。这样,string.blank
是未定义的,我认为OP不想使用new
非常正确。我将删除prototype.mmh,每次需要检查字符串是否为空时都必须调用string()fn,我感觉不太好是的,这就是为什么您应该按照我的回答中所示的那样做;)也许我不清楚:您调用的代码可能需要进行这样的调用。@FelixKling的“示例用法”让用户感到困惑,因为他们认为这是您代码的一部分,而不是您所说的原始代码的使用方式。尽管如此,我还是会这样回答这个问题+1@PaulS.:这两部分之间有一行分隔:-/I将使其更清楚。嗯,每次需要检查字符串是否为空时,都必须调用string()fn,我感觉不太好是的,这就是为什么您应该按照我的答案中所示的那样做;)也许我不清楚:您调用的代码可能需要进行这样的调用。@FelixKling的“示例用法”让用户感到困惑,因为他们认为这是您代码的一部分,而不是您所说的原始代码的使用方式。尽管如此,我还是会这样回答这个问题+1@PaulS.:这两部分之间有一行分隔:-/I会更清楚。为什么不保存一个步骤并从var t=ObjLiteral
开始?为什么不保存一个步骤并从var t=ObjLiteral
开始?