Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.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_Oop - Fatal编程技术网

Javascript 有没有一种方法可以在已经存在的构造函数中拥有一个构造函数?

Javascript 有没有一种方法可以在已经存在的构造函数中拥有一个构造函数?,javascript,oop,Javascript,Oop,我有以下充当基本构造函数的函数: function Foo() = {} ... exports Foo 它是一个空构造函数,被我不想更改的其他函数使用。此外,Foo仅从文件中导出 现在我需要在Foo中创建一个不同的构造函数 以下是我将enum作为一个独立构造函数所拥有的内容。但是我如何使它成为Foo的一部分呢 function enum(data) { this.data = data } enum.prototype.getVal() { return this.data; }

我有以下充当基本构造函数的函数:

function Foo() = {}
...
exports Foo
它是一个空构造函数,被我不想更改的其他函数使用。此外,
Foo
仅从文件中导出

现在我需要在
Foo
中创建一个不同的构造函数

以下是我将
enum
作为一个独立构造函数所拥有的内容。但是我如何使它成为
Foo
的一部分呢

function enum(data) {
    this.data = data
}

enum.prototype.getVal() { return this.data; }

var obj = new enum(5);
obj.getVal();

从你的通讯网里猜一猜

从文件中导出并不是真正的问题。如果您只是使用
Foo
作为名称空间来“挂起”函数,您可以这样做:

Enum.js

// all constructors should be capitalized
function Enum() { }
Enum.prototype.whatever ...

exports Enum
Foo.js

const Enum = require('./Enum');

// it's unclear why `Foo` is even a function to be honest
function Foo() { }

Foo.Enum = Enum;

exports Foo
someOtherFile.js

const Foo = require('./Foo');

const myEnumInstance = new Foo.Enum();

将其作为Foo的一部分
不清楚。您的意思是要创建某个对象的新实例并将其附加到
Foo
的实例?像
函数Foo(){this.something=new enum();}
Foo的一部分,这样我就不必显式地实例化
enum
,因为
Foo
只是从文件中导出。现在还不清楚你说的
使其成为Foo
的一部分是什么意思-你的意思是希望
Foo
继承自
enum
?您希望实现的
Foo
enum
之间的关系是什么?
Foo
的每个实例是否都应该包含
enum
的一个实例?每个
Foo
是否应该共享
enum
的一个实例?等等…持有一个实例意味着它是对象本身的一部分。共享实例指的是什么?从技术上讲,
Foo
应该以某种方式存储或共享
enum
的一个实例,但是实用程序函数的编写方式非常糟糕,我想在不中断或不做额外工作的情况下完成它。但是目前,
Foo
是一个空构造函数,然后我们向它添加了不同的方法。一个例子是:
Foo.General={};Foo.General.SetValue=function(value){}
…您混淆了术语
Foo
似乎不是构造函数,它似乎是一个命名空间。它是如何使用的?任何地方都有调用
new Foo()
的文件吗?我冒昧地猜测,这不是基于您如何描述它。因此,使用
Enum
构造函数创建不同的文件才有意义,因为它不是从
Foo.js
导出的,是吗?@kol-不,您可以将
Enum
的整个实现放在
Foo.js
中。但是,坦率地说,文件是免费的,请保持代码干净,并为每个问题创建单独的文件(或文件夹)。为什么必须从
Foo.js
导出
Enum
?为什么想要使用它的文件不能只要求('./Enum')?主要原因是我认为它没有实现的那么大,没有自己的文件。它有两种方法分开你的顾虑,我宁愿有100个20行文件而不是一个2000行文件。