Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/429.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 带有附加子函数的函数调用_Javascript - Fatal编程技术网

Javascript 带有附加子函数的函数调用

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

我在问自己,在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.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
开始?