节点通过构造函数创建实例
node creating instances via costructors
在尝试使用 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')
但是如果我需要创建购物车的多个实例怎么办?
我试图重构我的代码,创建一个包含 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;
现在可以了。
但是为了探索所有的可能性,我想知道我尝试的第一种方法如何解决它。当我可以同时将它用作 "instanceble" Class 和单例时,只有一个实例。
你能告诉我如何按照我想要的方式解决它吗?
如果您提供一些其他方法来解决创建可实例化 Classes 的任务,我将不胜感激。
第一个选项可能如下所示:
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();
在尝试使用 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')
但是如果我需要创建购物车的多个实例怎么办?
我试图重构我的代码,创建一个包含 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;
现在可以了。 但是为了探索所有的可能性,我想知道我尝试的第一种方法如何解决它。当我可以同时将它用作 "instanceble" Class 和单例时,只有一个实例。
你能告诉我如何按照我想要的方式解决它吗? 如果您提供一些其他方法来解决创建可实例化 Classes 的任务,我将不胜感激。
第一个选项可能如下所示:
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();