Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/438.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_Class_Constructor_Instance - Fatal编程技术网

Javascript 通过构造器创建实例的节点

Javascript 通过构造器创建实例的节点,javascript,node.js,class,constructor,instance,Javascript,Node.js,Class,Constructor,Instance,在使用nodejs进行实验时,我遇到了一个问题,即通过构造函数来启用isntances创建。我创建了简单的购物篮功能。 我得到了cart.js文件 var items = []; function addItem (name, price) { items.push({ name: name, price: price }); } exports.total = function () { return items.reduce(f

在使用nodejs进行实验时,我遇到了一个问题,即通过构造函数来启用isntances创建。我创建了简单的购物篮功能。 我得到了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;
我用node运行它

var cart = require('./cart')
但是如果我需要创建一个购物车的多个实例呢

我试图重构代码,创建一个构造函数,其中包含
items[]addItem()和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
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...
    }
};
我是这样运行的:

    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
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...
    }
};
我明白,我可以使用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;
现在它开始工作了。 但是为了探索所有的可能性,我想知道如何用我第一次尝试的方法解决它。当我可以使用它作为“instanceble”类对象和单例对象时,同时只使用一个实例

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

第一个选项可能如下所示:

    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
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();

谢谢,乔治!我不知道这种方式。现在我装备了这个。非常感谢。