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

时间:2015-09-30 14:28:22

标签: javascript node.js mongoose

这是一个难以理解的问题,但是你怎么能让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];
            }
        });
    })();

2 个答案:

答案 0 :(得分: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();




答案 1 :(得分:0)

JavaScript函数是一种特殊的JavaScript对象。 这意味着所有函数都是对象,但对象不一定是函数。