如何使用javascript正确返回对象而不是函数?

如何使用javascript正确返回对象而不是函数?,javascript,Javascript,我正在为自己制作一个助手库。首先,我是这样包装的: (function (Helper, window, document) { var Helper = Helper || {}; var type = function () { return { isObject: function (value) { return value !== null && Object.prototype.t

我正在为自己制作一个助手库。首先,我是这样包装的:

(function (Helper, window, document) {
    var Helper = Helper || {};
    var type = function () {
        return {
            isObject: function (value) {
                return value !== null && Object.prototype.toString.call(value) === "[object Object]";
            },
            isNumber: function (value) {
                return value !== null && Object.prototype.toString.call(value) === "[object Number]" && !isNaN(value);
            },
            isString: function (value) {
                return value !== null && Object.prototype.toString.call(value) === "[object String]";
            },
            isArray: function (value) {
                return value instanceof Array;
            },
            isFunction: function (value) {
                return typeof value === "function";
            },
            isDate: function (value) {
                return value instanceof(Date);
            },
            isRegExp: function (value) {
                return value instanceof RegExp;
            },
            isBoolean: function (value) {
                return value !== null && Object.prototype.toString.call(value) === "[object Boolean]";
            },
            isError: function (value) {
                return value instanceof Error;
            },
            isNull: function (value) {
                return value === null;
            },
            isUndefined: function (value) {
                return typeof value === "undefined";
            }
        };
    };
    Helper.type = type;
})(Helper = window.helper || {}, window, document);

现在这很好,但是为了访问函数,我需要调用一个类似Helper.type().isNumber(5)的函数。这应该是什么样子的,以便它可以作为对象值返回,比如这个Helper.type.isNumber(5)?

只需从
类型中删除
函数()
包装:

(function (Helper, window, document) {
    var Helper = Helper || {};
    var type = {
        isObject: function (value) {
            return value !== null && Object.prototype.toString.call(value) === "[object Object]";
        },
        ...
        isUndefined: function (value) {
            return typeof value === "undefined";
        }
    };
    Helper.type = type;
})(Helper = window.helper || {}, window, document);

只需删除
函数类型(){
};Helper.type=type
并将
return
替换为
Helper.type=

(function(Helper, window, document) {

  Helper.type = {
    isNumber: function () {...}
  };


 })(Helper = window.helper || {}, window, document);

而不是分配函数引用:

Helper.type = type;
改为指定函数返回值:

Helper.type = type();

可以删除
var-type=function(){…}
上的函数wrap
function(){…
然后
var-type={isObject:…
或只执行函数instant,如
var-type=function(){…}()
Helper.type=type()
请注意,如果
窗口.Helper
未定义,您不是在向
助手添加函数,而是在替换。您可以使用一种简单得多的模式:如果
窗口.Helper
未定义,您无处可以分配它。是的,您可以将其分配给
窗口.Helper
(隐式全局绑定)或者
var Helper
,如果它在那里。但是OP正在用
Helper
{}
覆盖
Helper
,我猜这不一定是他想要做的。在OP中同样的错误:-)无论如何
window.Helper
总是未定义的,因为