通过构造函数创建节点实例

node creating instances via costructors

本文关键字:节点 实例 创建 构造函数      更新时间:2023-09-26

在尝试nodejs时,我遇到了一个通过构造函数创建实例的问题。我创建了简单的购物车功能。文件cart。js

 var items = [];
function addItem (name, price) {
    items.push({
        name: name,
        price: price
    });
}
exports.total = function  () {
    return items.reduce(function (a,b) {         
        return a + b.price;
    }, 0);
};
exports.addItem = addItem;

我用节点

运行它
var cart = require('./cart')

但是如果我需要创建一个Cart的多个实例该怎么办?

我试着重构我的代码,创建一个构造函数,保存items[] addItem() and total()函数,像这样:

    exports.Cart = function  () {
    var items = [];
    function addItem (name, price) {
    items.push({
        name: name,
        price: price
    });
    }
    function total () {
    return items.reduce(function (a,b) {        
        return a + b.price;
                                        }, 0);
    }
};

我这样运行:

var cart = require('./cart');
cart.addItem('Pepsi',199);       // no problem with this
cart2 = new cart.Cart();      // it gives me undefined can't be a function

我明白,我可以使用PROTOTYPE属性来添加函数和道具到我的购物车因此,我创建了第二个文件cart2.js并放置如下内容:

    function Cart () {
    this.items = [];
}

Cart.prototype.addItem = function (name, price) {
    this.items.push({
        name: name,
        price: price
    });
};
Cart.prototype.total =  function () {
    return this.items.reduce(function (a,b) {            
        return a + b.price;
                                        }, 0);
    };
module.exports = Cart;

现在它工作了。但是为了探索所有的可能性,我想知道如何用我尝试过的第一种方法解决它。当我可以使用它作为"实例化"类的东西和作为单例的东西,只有一个实例,在同一时间。

你能告诉我如何解决这个问题吗?如果您能提供一些其他方法来解决创建可实例化类的任务,我将不胜感激。

第一个选项可能是这样的:

exports.Cart = function  () {
    var items = [];
    // ...other private stuff...
    return {
        addItem: function (name, price) {
            items.push({
                name: name,
                price: price
            });
        },
        total: function() {
            return items.reduce(function (a,b) {
                return a + b.price;
            }, 0);
        }
       // ...other public stuff...
    }
};

用法:

 var carts = require('carts');
 firstCart = carts.Cart();
 second = carts.Cart();