javascript函数如何也可以成为一个对象?

Chr*_*ski 0 javascript mongoose node.js

这是一个难以理解的问题,但是如何让Model.method()和Model()同时有效?让我问这个的特定库是mongoose(http://mongoosejs.com/docs/)其中Model作为对象表示mongo集合并且有几个方法而Model作为函数是mongo文档的构造函数,带有一些方法.我正在尝试做类似的事情,但它只返回一个函数制作typeof Model === 'function'而从不反对.它如下:

let model = (function(){
        for(var i in queries){
            if(typeof i == 'function'){
                if(i == 'insert'){
                    continue;
                }
                this[i] = function(){
                    queries[i].apply(this, arguments); // queries is a separate module I've written that has methods for querying a DB
                };
            }
        }
        return (function(){
            for(var i in arguments[0]){
                if(!(i in schema) && typeof arguments[0][i] != typeof schema[i]){
                    this[i] = arguments[0][i];
                }
                else{
                    throw new Error('Invalid argument, key: ' + i + ' value: ' + arguments[0][i]);
                }
            }
            for(var i in schema.methods){
                this[i] = schema.methods[i];
            }
        });
    })();
Run Code Online (Sandbox Code Playgroud)

Que*_*tin 5

所有JavaScript函数都是对象.这就是JavaScript的工作原理.

function alert(message) {
    document.body.appendChild(document.createTextNode(message));
    document.body.appendChild(document.createElement('br'));
}

function myFunction() {
  alert("This is myFunction");
}

myFunction.property = "Hello";

myFunction.recursive = myFunction;

myFunction();
alert(myFunction.property);
alert(myFunction.name);
myFunction.recursive.recursive.recursive.recursive.recursive();
Run Code Online (Sandbox Code Playgroud)