我应该在JavaScript中嵌套构造函数和原型吗?

dbr*_*dbr 3 javascript prototype-chain

我正在处理的一个项目目前已经调用了一个对象类型Chain,它本身只生成一种Link只使用它的对象.在之前的项目中,我已经嵌套了构造函数Link内部的对象构造函数和原型Chain,但是,我开始怀疑这次是否是最好的方法,因为我实际上似乎是Chain用它自己的定义设置每个的Link每一次.

为清楚起见,这是我原来的代码:

var Chain = function() {
    var self = this;

    var Link = function(key) {
        this.prop = key;
    };
    Link.prototype.attach = function(args) {
        for (let value of args) {
            this[value.prop] = value.value;
        }
    };

    self.links = [];

}
Chain.prototype.add = function(key) {
    this.links.push(new Link(key));
}
Run Code Online (Sandbox Code Playgroud)

然后我开始想知道我是否应该将Link构造函数和原型存储在野外(就像我一样)Chain(对于记录,它不是在野外,它实际上包含在一个对象中)或者我是否应该使用原型Chain定义Link并保持它.

在这种情况下,我没有找到关于最佳实践的大量信息,虽然我强烈怀疑我的第一种做事方式不是最佳/正确的方式; 我不确定我的替代品是否也是.

所以我想问一下,这样做的最佳实践/最有效/最明智的方法是什么?

T.J*_*der 5

在之前的项目中,我已经嵌套了构造函数Link内部的对象构造函数和原型Chain,但是,我开始怀疑这次是否是最好的方法...

然后我开始想知道我是否应该将Link构造函数和原型存储在野外,就像我一样Chain

还有第三种选择:一个Link私有的Chain:

var Chain = (function() {
    function Link() {
        // ...
    }
    // Link.prototype stuff here

    function Chain() {
        // ...
    }
    // Chain.prototype stuff here

    return Chain;
})();
Run Code Online (Sandbox Code Playgroud)

现在,Chain是公开的,Link是私人的,但只有一个,Link而不是为每个人创造一个新的Chain.

这与ES2015 + class语法同样有效:

const Chain = (function() {
    class Link {
        // ...
    }

    class Chain {
        // ...
    }

    return Chain;
})();
Run Code Online (Sandbox Code Playgroud)