Javascript 通过构造器创建实例的节点
在使用nodejs进行实验时,我遇到了一个问题,即通过构造函数来启用isntances创建。我创建了简单的购物篮功能。 我得到了cart.js文件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
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();
谢谢,乔治!我不知道这种方式。现在我装备了这个。非常感谢。