具有附加子功能的函数调用

时间:2013-08-26 12:42:19

标签: javascript

我问自己是否可以在js中调用函数,同时在其中有其他子函数

fn(s);

fn.subfn(s);

例如,制作像这样的工具

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,可能表现不佳,代码不佳,或者我错了?

感谢。

3 个答案:

答案 0 :(得分:1)

函数只是对象,所以是的,您只需向它们添加属性:

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);

与你在开头展示的例子不同。

答案 1 :(得分:0)

您可以尝试这样的事情(未经测试):

function string(s) {
  if(s) return typeof(s) === "string";
}

string.blank = function(s) {
  return s.trim().length === 0;
}

但是,您可能会遇到使用“string”作为函数名称的问题,因为它可能会与现有的String对象发生冲突。

答案 2 :(得分:0)

您可以创建Thing()类并实例化“thing”对象以防止重新定义函数。 (Thing()而不是string()以防止任何类型的冲突。)

function Thing(s) {
    return {
        isString: function() {
            return typeof(s) === "string";
        },
        isBlank: function() {
            return s.trim().length === 0;
        }  
    };
}

var t = new Thing("123");
t.isString() // true
t.isBlank() // false

http://jsfiddle.net/KKrsa/

相关问题