Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 节点模块与原型继承_Javascript_Node.js_Inheritance_Prototype - Fatal编程技术网

Javascript 节点模块与原型继承

Javascript 节点模块与原型继承,javascript,node.js,inheritance,prototype,Javascript,Node.js,Inheritance,Prototype,目前我有: index.js(在模块foo中) server.js(在单独的模块栏中) 这很好,但我觉得如果我不必使用new关键字来实例化一个新的foo对象来公开其成员函数,那么它会更漂亮,也更容易让其他人理解 下面是我希望能够做到的: var greeting = 'Hello World!', foo = require('foo')(options); foo.bar(greeting); // prints Hello World! 如何修改当前的foo-index.js,以便

目前我有:

index.js(在模块foo中)

server.js(在单独的模块栏中)

这很好,但我觉得如果我不必使用new关键字来实例化一个新的foo对象来公开其成员函数,那么它会更漂亮,也更容易让其他人理解

下面是我希望能够做到的:

var greeting = 'Hello World!',
    foo = require('foo')(options);
foo.bar(greeting); // prints Hello World!

如何修改当前的foo-index.js,以便能够访问上述代码片段中描述的foo对象?

如果您不希望模块的使用者使用
new
,可以公开工厂方法:

// index.js (in module foo)

function Foo(options) {
    this.memberVar = options.memberVar;
}

Foo.prototype.bar = function(word) {
    console.log('word: ', word);
}

module.exports = function(options) {
    return new Foo(options);
}


// server.js (in separate module bar) 

var greeting = 'Hello World!',
    foo = require('foo')(options);
foo.bar(greeting); // prints Hello World!

但是,请注意,它可能会极大地迷惑您模块的用户。您的原始模式被广泛接受,是公开构造函数的首选方式

您的示例可能歪曲了您的意图,因为它没有使用OOP提供的上下文。如果您的模块提供的所有函数都不需要(每个实例可变)上下文,那么就没有必要追求OOP。是的,我同意在这个示例中我不需要OOP,但这不是我的实际用例,只是一些快速垃圾。
var greeting = 'Hello World!',
    foo = require('foo')(options);
foo.bar(greeting); // prints Hello World!
// index.js (in module foo)

function Foo(options) {
    this.memberVar = options.memberVar;
}

Foo.prototype.bar = function(word) {
    console.log('word: ', word);
}

module.exports = function(options) {
    return new Foo(options);
}


// server.js (in separate module bar) 

var greeting = 'Hello World!',
    foo = require('foo')(options);
foo.bar(greeting); // prints Hello World!