Tau*_*i28 3 javascript module node.js
我有简单的模块query.js:
module.exports = function(queryString){
return{
string: queryString
};
};
Run Code Online (Sandbox Code Playgroud)
现在我从另一个模块加载这个模块并从中创建实例:
var Query = require("./query");
var myQuery = new Query("SELECT * FROM `mytabel`");
console.log(myQuery instanceof Query); // Ouputs false
console.log(myQuery.constructor == Query); // Outputs false
Run Code Online (Sandbox Code Playgroud)
正如我从nodejs文档中所理解的那样,require("Query")给了我module.exports对象,在我的例子中是匿名函数,它接受1个参数queryString.我使用此函数来创建新对象myQuery,但它不是Query的实例.
我的问题:我怎样才能检查myQuery是否是从Query函数创建的,为什么两个输出都是假的,我认为它们应该是真的?
虽然dskh是正确的,但更多的解释可能是有价值的.
函数只能在返回Object之外的其他内容时充当构造函数.
一旦函数返回一个Object(例如function SomeFunc() { return {}; }),如果你调用var a = new SomeFunc();,变量a将成为返回的Object,它是一个普通的Object,并且不会是SomeFunc 的创建实例.如果SomeFunc返回的东西不是Object,JS引擎会忽略函数返回的任何内容,而是返回一个实例SomeFunc的Object,这就是你想要的.
因此,在您的情况下,您返回一个Object,但为了使其作为构造函数工作,您需要不返回任何内容(或者至少不返回Object):
module.exports = function(queryString){
this.string = queryString;
};
Run Code Online (Sandbox Code Playgroud)
看,它不会返回一个Object,所以每次调用时都会得到一个Query实例new Query().
| 归档时间: |
|
| 查看次数: |
2418 次 |
| 最近记录: |