为什么第一种宣传方法不是第二种方法?

时间:2015-11-07 11:22:57

标签: javascript node.js new-operator bluebird

这是What is wrong with this code that promisify a function?

的后续问题

方法1有效;

\w*[^\s]*[^a\s]{2}[^\s]*\w*

方法2不起作用;

var Converter = require('csvtojson').Converter;
Promise.promisifyAll(Converter.prototype);
var converter = new Converter();

为什么方法1工作而不是方法2?

2 个答案:

答案 0 :(得分:1)

Promise.promisifyAll(obj)

返回obj,因此......

Promise.promisifyAll(Converter.prototype)

...返回Converter.prototype,而不是Converter因此......

var converter = Promise.promisifyAll(Converter.prototype);

...会将Converter.prototype分配给converter

为了宣传原型并分配Converter的实例,你应该(现实地)写两个语句(即方法1):

Promise.promisifyAll(Converter.prototype);
var converter = new Converter();

可以写单行......

var converter = new (Promise.promisifyAll(Converter.prototype).constructor);

......虽然它的可读性较差。

答案 1 :(得分:0)

在重新审核文档https://www.npmjs.com/package/csvtojson时,Convertor是一个构造函数。它必须与前面的new一起使用。