这是一个难以理解的问题,但是你怎么能让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];
}
});
})();
答案 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对象。 这意味着所有函数都是对象,但对象不一定是函数。