我正在尝试为项目创建一个库,如下所示:
module.exports = Diary;
function Diary() {
someFunction = function( message ) {
console.log(message)
}
function D() {
return new D._Section;
}
D.about = {
version: 1.0
};
D.toString = function () {
return "Diary "+ D.about.version;
};
var Section = function () {
this.Pages = []
}
D._Section = Section;
//to extend the library for plugins usage
D.fn = sectionproto = Section.prototype = D.prototype;
sectionproto.addPage = function (data) {
this.Pages.push(data)
conole.log(this.Pages)
};
return D;
};
主要目的是为服务器端和客户端操作使用相同的库,因此我们可以拥有相同的代码库。
这个问题是当我在节点应用程序中使用它时
var Diary = require('./diary.js');
var myDiary = new Diary();
console.log(myDiary.addPage('some text on page'))
并运行它,它会引发一个错误
TypeError:myDiary.addPage不是一个函数
我不确定要在Node js上执行此操作的方法,因为我们的客户端应用程序非常庞大,因此如果必须采用其他模式,则需要进行一些更改才能对其进行更改。
第一个问题是:
1.这种方法是正确的还是我们需要研究其他东西
2.如果这可以在node js应用程序上工作,那么如何以最小的库更改
最佳答案
主要问题是您要导出整个Diary
函数,但随后使用它的方式就好像收到了它的返回值(D
函数)一样。
导出的方式如下:
var Diary = require('./diary.js')();
// Note -------------------------^^
var myDiary = new Diary();
但是请注意,这意味着每次导入都会创建自己的
D
函数和相关联的东西。或者,导出调用
Diary
的结果,但是Diary
函数没有任何作用。其他问题是:
您不声明
someFunction
或sectionproto
就成为The Horror of Implicit Globals *的猎物。确保声明您的变量。该结构过于复杂,没有任何明显的原因,因此需要如此复杂。
*(披露:这是我贫乏的小博客上的帖子)